Python多线程中断输入()
您好,我对python相当陌生,我正在尝试创建一个程序,该程序启动一个线程,五秒钟后将中断input()函数并打印消息“Done!”。Python多线程中断输入(),python,multithreading,input,interrupt,Python,Multithreading,Input,Interrupt,您好,我对python相当陌生,我正在尝试创建一个程序,该程序启动一个线程,五秒钟后将中断input()函数并打印消息“Done!”。 目前,它只在输入后打印“完成!”。即使过了五秒钟,用户也必须在显示消息“Done!”之前输入信息。如何让线程中断input()函数 import time import threading def fiveSec(): time.sleep(5) print('Done!') def main(): t = threading.Thr
目前,它只在输入后打印“完成!”。即使过了五秒钟,用户也必须在显示消息“Done!”之前输入信息。如何让线程中断input()函数
import time
import threading
def fiveSec():
time.sleep(5)
print('Done!')
def main():
t = threading.Thread(target = fiveSec)
t.daemond = True
t.start()
input('::>')
if __name__ == '__main__':
main()
(使用Python版本3.4.2)执行此操作不需要线程,而是使用信号:
import signal
def interrupted(signum, frame):
print "Timeout!"
signal.signal(signal.SIGALRM, interrupted)
signal.alarm(5)
try:
s = input("::>")
except:
print "You are interrupted."
signal.alarm(0)
您可以阅读有关信号模块的文档:
正如NeoWang所展示的,你可以通过信号来完成。你也可以用一个线程和一个信号。下面是一个更完整的示例,该示例允许您输入几行数据,如果按下enter键后超过5秒,则将退出:
import time
import threading
import os
import signal
class FiveSec(threading.Thread):
def restart(self):
self.my_timer = time.time() + 5
def run(self, *args):
self.restart()
while 1:
time.sleep(0.1)
if time.time() >= self.my_timer:
break
os.kill(os.getpid(), signal.SIGINT)
def main():
try:
t = FiveSec()
t.daemon = True
t.start()
while 1:
x = input('::> ')
t.restart()
print('\nYou entered %r\n' % x)
except KeyboardInterrupt:
print("\nDone!")
if __name__ == '__main__':
main()
您使用的是哪个操作系统?根据文档,SIGALRM在windows上似乎不起作用。该文件没有提供任何替代方案