如何停止正在运行的threading.Thread?



我发现了这个非阻塞代码使用线程在JavaScript中提供非阻塞setInterval函数的功能。但是当我试图停止进程时,它甚至没有按Ctrl + C停止它,我尝试了一些更多的方法来停止进程,但它们不起作用。谁能告诉一个正确的方法来停止这个过程,提前谢谢你。

代码

import threading
class ThreadJob(threading.Thread):
def __init__(self,callback,event,interval):
'''runs the callback function after interval seconds
:param callback:  callback function to invoke
:param event: external event for controlling the update operation
:param interval: time in seconds after which are required to fire the callback
:type callback: function
:type interval: int
'''
self.callback = callback
self.event = event
self.interval = interval
super(ThreadJob,self).__init__()
def run(self):
while not self.event.wait(self.interval):
self.callback()

event = threading.Event()
def foo():
print ("hello")
def boo():
print ("fello")

def run():
try:
k = ThreadJob(foo,event,2)
d = ThreadJob(boo,event,6)
k.start()
d.start()
while 1:
falg = input("Press q to quit")
if(falg == 'q'):
quit()
return 
except KeyboardInterrupt:
print('Stoping the script...')         
except Exception as e:
print(e)
run()
print( "It is non-blocking")

您所需要做的就是替换这一行:

quit()

和这个:

event.set()

如果有线程在运行,Python程序不会退出,所以quit()函数没有做任何事情。一旦设置了事件的内部标志,线程将退出它们的while循环,因此调用event.set()将导致终止您创建的两个额外线程。然后程序将退出。

注意:从技术上讲,您可以将线程设置为"daemon"然后他们就不会让这个项目继续下去。但我认为这不是正确的解决方案。

相关内容

  • 没有找到相关文章

最新更新