Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python多线程中断输入()_Python_Multithreading_Input_Interrupt - Fatal编程技术网

Python多线程中断输入()

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

您好,我对python相当陌生,我正在尝试创建一个程序,该程序启动一个线程,五秒钟后将中断input()函数并打印消息“Done!”。
目前,它只在输入后打印“完成!”。即使过了五秒钟,用户也必须在显示消息“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上似乎不起作用。该文件没有提供任何替代方案