等待在单独的线程中的用户输入(waiting for user input in separate

2019-06-27 06:13发布

我试图做到的方式产卵是等待用户输入一个线程; 如果没有输入,在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的

Answer 1:

貌似是没有办法的时间用户输入。 在这种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


Answer 2:

你的情况不要担心了关闭线程突然。 在链接,说

它通常是一个糟糕的模式突然杀死一个线程,在Python和在任何语言。 想想以下情况:

  • 该线程持有,必须正确关闭的重要资源。
  • 线程创建了也必须被杀死了另外几个线程。

需要正确关闭,在这种情况下,关闭数据库连接,打开的文件等资源关闭线程正确是至关重要的。 在这种情况下,您的解决方案是有效的。*

如果此解决方案不能满足你可以用如何设置时间限制输入



文章来源: waiting for user input in separate thread