[英]How to stop this running 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() 的调用将导致您创建的两个额外线程的终止。 然后程序将退出。
注意:从技术上讲,您可以将线程设置为“守护进程”,然后它们不会使程序保持活动状态。 但我认为这不是正确的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.