我有一个相当简单的程序,每个添加到taskq中的任务都在执行并计算一些东西,比如30秒。这个任务不是'在某种情况下或在循环中运行。
def run(self):
while not self.stopper.is_set():
DO_MY_30_SECONDS_WORK(self)
self.task_done()
现在,假设我有一个thread.event,这可以在任务完成之前/之后检查。但有没有办法告诉已经运行的线程停止或退出它的执行。
答案 0 :(得分:1)
如果DO_MY_30_SECONDS_WORK(self)
阻止,则无法停止正在运行的线程。可以说你可以将它设置为daemon
线程,并且当你的主程序执行完成时它会突然被杀死,如果线程实际上持有资源(例如写入文件)会导致问题,并且通常完成一个主题并不是一个好主意。
你可以做的是重新设计DO_MY_30_SECONDS_WORK(self)
并使其无阻塞,这意味着将工作分成小块并让它在合理的间隔内检查停止标志,这样你的线程将是当你告诉它时,反应足以完成自己。