繁体   English   中英

无法使用Ctrl-c终止线程

[英]Can't terminate thread with Ctrl-c

我在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

在我按下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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM