Python Can';t使用Ctrl-c终止线程

Python Can';t使用Ctrl-c终止线程,python,python-3.x,Python,Python 3.x,我在python中创建了一个类似setInterval的函数,但cntrl-c无法终止它。代码如下 import threading def setInterval(sec,func,*args,**kw): def wrapper(): setInterval(sec,func,*args,**kw) func(*args,**kw) t = threading.Timer(sec, wrapper) t.start() re

我在python中创建了一个类似setInterval的函数,但cntrl-c无法终止它。代码如下

import threading
def setInterval(sec,func,*args,**kw):
    def wrapper():
        setInterval(sec,func,*args,**kw) 
        func(*args,**kw) 
    t = threading.Timer(sec, wrapper)
    t.start()
    return t
这就是我要做的

>>> setInterval(3,print,"hello")
<Timer(Thread-1, started 6576)>
>>> hello
KeyboardInterrupt
>>> hello
设置间隔(3,打印“你好”) >>>你好 键盘中断 >>>你好 在我按下ctrl-c键后,它将继续运行。如果我使用键盘中断,我将如何添加一些内容使其停止

您可以使用以编程方式停止线程:

import time
import threading

def setInterval(sec,func,*args,**kw):
    e = threading.Event()
    def wrapper():
        print('Started')
        while not e.wait(sec):
            func(*args,**kw)
        print('Stopped')
    t = threading.Thread(target=wrapper)
    t.start()
    return t,e

if __name__ == '__main__':
    try:
        t,e = setInterval(1,print,'hello')
        time.sleep(5)
    except KeyboardInterrupt:
        pass
    e.set()
    t.join()
    print('Exiting')
输出:

Started
hello
hello
hello
hello
Stopped
Exiting
点击Ctrl-C:

Started
hello
hello
Stopped
Exiting

您可能想在原始帖子中添加您正在使用的操作系统(虽然可能不太相关,但是Python的哪个版本)@Levon Windows 8.1 Python version 3.3在Python外壳中运行它信号(包括键盘中断)总是以Python传递到主线程,而不管平台如何。这就是为什么你的线程没有看到它。无法更改。如果要终止它,请在主线程退出时将其设为守护线程。否则,如果你需要清理,事情就会变得复杂。其他的评论都很到位。这意味着pythonshell不是测试线程相关逻辑的好环境。编写一个测试脚本并运行它。