Python - 停止长期运行的taskq的线程

时间:2017-01-19 19:36:53

标签: python multithreading python-2.7 threadpool

我有一个相当简单的程序,每个添加到taskq中的任务都在执行并计算一些东西,比如30秒。这个任务不是'在某种情况下或在循环中运行。

def run(self):
    while not self.stopper.is_set():
        DO_MY_30_SECONDS_WORK(self)
        self.task_done()

现在,假设我有一个thread.event,这可以在任务完成之前/之后检查。但有没有办法告诉已经运行的线程停止或退出它的执行。

1 个答案:

答案 0 :(得分:1)

如果DO_MY_30_SECONDS_WORK(self)阻止,则无法停止正在运行的线程。可以说你可以将它设置为daemon线程,并且当你的主程序执行完成时它会突然被杀死,如果线程实际上持有资源(例如写入文件)会导致问题,并且通常完成一个主题并不是一个好主意。

你可以做的是重新设计DO_MY_30_SECONDS_WORK(self)并使其无阻塞,这意味着将工作分成小块并让它在合理的间隔内检查停止标志,这样你的线程将是当你告诉它时,反应足以完成自己。