我想要一种方法来生成一个等待用户输入的线程;如果在10秒内没有输入任何输入,我希望脚本终止生成的线程并继续处理.如果输入文本,我有办法从线程中获取输入但是我无法让超时终止新生成的线程.
在下面的例子中,我是最接近的.我告诉新创建的线程它是一个守护进程,它将在主脚本退出时退出.我对此的问题是该线程将继续等待,直到脚本退出或用户输入了某些内容.
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]
我知道突然杀死一个线程不是最好的方法(Related Link),但我不知道如何中断等待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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。