Python Can';t使用Ctrl-c终止线程
我在python中创建了一个类似setInterval的函数,但cntrl-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
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不是测试线程相关逻辑的好环境。编写一个测试脚本并运行它。