gpt4 book ai didi

multithreading - Python在休眠时终止线程

转载 作者:行者123 更新时间:2023-12-03 12:59:53 25 4
gpt4 key购买 nike

我从这个link的第一个答案修改了以下代码。

class StoppableThread(threading.Thread):
"""Thread class with a stop() method. The thread itself has to check
regularly for the stopped() condition."""

def __init__(self, target, timeout):
super(StoppableThread, self).__init__()
self._target = target
self._timeout = timeout
self._stop = threading.Event()
self.awake = threading.Event()

def run(self):
while(not self._stop.isSet()):
self.awake.clear()
time.sleep(self._timeout)
self.awake.set()
self._target()

def stop(self):
self._stop.set()

def stopped(self):
return self._stop.isSet()

创建此类的实例并将其设置为守护进程后,我想稍后在线程休眠时终止它,否则等待它完成 _target()函数然后终止。我可以通过调用stop方法来处理后一种情况。但是,当 _awake事件对象设置为 False时,我不知道要终止它。有人可以帮忙吗?

最佳答案

您的线程不必显式sleep。它可以简单地等待另一个线程要求它停止。

def run(self):
while(not self._stop.isSet()):
self.awake.clear()
self._stop.wait(self._timeout) # instead of sleeping
if self._stop.isSet():
continue
self.awake.set()
self._target()

为此,您根本不需要 awake事件。 (如果另一个线程想要检查其“状态”,则可能仍需要它。我不知道这是否是您的要求)。

没有 awake,您的代码将是:
class StoppableThread(threading.Thread):

def __init__(self, target, timeout):
super(StoppableThread, self).__init__()
self._target = target
self._timeout = timeout
self._stop = threading.Event()

def run(self):
while not self.stopped():
self._stop.wait(self._timeout) # instead of sleeping
if self.stopped():
continue
self._target()

def stop(self):
self._stop.set()

def stopped(self):
return self._stop.isSet()

关于multithreading - Python在休眠时终止线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36173410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com