我试图做到的方式产卵是等待用户输入一个线程; 如果没有输入,在10秒内进入,我希望脚本kill掉产生的线程并继续处理。 我有一个办法让输入从线程回来,如果输入文字,但我也没办法让超时杀死新产生的线程。
在下面的例子是我来最接近的一次。 我告诉新创建的线程,它是一个守护进程和主要脚本退出时将退出。 我有这个问题是该线程将继续等待,直到该脚本退出,或用户已经输入的东西。
shared_var = ['1']
def run(ref):
ref[0] = raw_input("enter something: ")
print "shared var changed to '%s'" % (ref[0])
thread = threading.Thread(target=run, args=(shared_var,))
thread.daemon = True
thread.start()
time.sleep(10) # simplified timeout
#Need some way to stop thread if no input has been entered
print "shared var = " + shared_var[0]
我知道突然杀线程没有去(最好的方式相关链接 ),但我不知道如何中断新的线程等待的raw_input的
貌似是没有办法的时间用户输入。 在这种SmartElectron提供的链接,因为一旦被的raw_input请求的计时器停止该解决方案不起作用。
最好的解决办法,到目前为止是:
# Declare a mutable object so that it can be pass via reference
user_input = [None]
# spawn a new thread to wait for input
def get_user_input(user_input_ref):
user_input_ref[0] = raw_input("Give me some Information: ")
mythread = threading.Thread(target=get_user_input, args=(user_input,))
mythread.daemon = True
mythread.start()
for increment in range(1, 10):
time.sleep(1)
if user_input[0] is not None:
break
你的情况不要担心了关闭线程突然。 在链接,说
它通常是一个糟糕的模式突然杀死一个线程,在Python和在任何语言。 想想以下情况:
- 该线程持有,必须正确关闭的重要资源。
- 线程创建了也必须被杀死了另外几个线程。
需要正确关闭,在这种情况下,关闭数据库连接,打开的文件等资源关闭线程正确是至关重要的。 在这种情况下,您的解决方案是有效的。*
如果此解决方案不能满足你可以用如何设置时间限制输入