python多线程一个线程输出input,一个线程计时怎么做?
本帖最后由 時光筆墨 于 2020-7-31 12:56 编辑给用户5秒时间输入,如果不输入就用默认值,一个线程输出input,一个线程计时,代码上怎么实现? 本帖最后由 xiaosi4081 于 2020-8-1 20:28 编辑
暴力解法:{:10_256:}
import threading,time
def test():
global a
a = input("a=")
try:
func = threading.Thread(target=test)
func.start()
time.sleep(5)
if not a:
raise KeyboardInterrupt
except KeyboardInterrupt:
a = 5
pass
print(a)
xiaosi4081 发表于 2020-7-31 16:16
暴力解法:
不行啊- - 来个大佬,帮忙看看怎么写啊- - 時光筆墨 发表于 2020-8-1 21:24
来个大佬,帮忙看看怎么写啊- -
感觉应该没办法,因为 input 函数没办法将他自动终止输入,也可能是我技术不够吧,尽量写了个类似的:
from threading import Thread
from time import sleep,perf_counter
def func():
global user
def a():
global user
user = input('>>>')
t = Thread(target=a)
t.setDaemon(True)
t.start()
while True:
sleep(0.5)
if user != None:
return user
if perf_counter() >= 5:
user = 100
return user
user = None
func()
print(user) Twilight6 发表于 2020-8-2 20:38
感觉应该没办法,因为 input 函数没办法将他自动终止输入,也可能是我技术不够吧,尽量写了个类似的:
...
其实暴力解法应该是可以的,只不过没安装库 時光筆墨 发表于 2020-8-1 21:20
不行啊- -
哪报错? xiaosi4081 发表于 2020-8-4 14:55
哪报错?
支持! 本帖最后由 Cool_Breeze 于 2020-8-5 15:30 编辑
#coding=utf-8
from multiprocessing import Process,Queue
import time
import os, sys
q = Queue()
sec = 5
choose = 0
def input_wiat(q, fn):
sys.stdin = os.fdopen(fn)
while True:
try:
time.sleep(1)
n = int(input('默请在5秒内输入一个整数\n默认为0\n请输入:'))
q.put(n)
break
except ValueError:
continue
if __name__ == '__main__':
fn = sys.stdin.fileno()
p = Process(target=input_wiat, args=(q, fn))
p.start()
while sec:
if not q.empty():
choose = q.get()
break
time.sleep(1)
sec -= 1
p.terminate()
print('choose = {}'.format(choose)) 这里 Cool_Breeze 发表于 2020-8-6 11:31
这里
你答的也有道理啊{:9_219:} 陈尚涵 发表于 2020-8-7 20:01
你答的也有道理啊
{:9_218:}
页:
[1]