从同一进程的线程中杀死所有线程和进程

时间:2014-02-10 07:58:52

标签: python multithreading thread-safety exit multiprocess

我有一个生成2种类型的线程类的进程。一个线程负责使用job_queue(此类的100Threads通常在运行)。第二个线程是一个杀戮线程。我正在使用从thread2设置的result_done标志,问题是我的threads1等待X秒,然后检查是否设置了result_done标志。

def run(self):
    while True:
        try:
            val = self.job_queue.get(True,self.maxtimeout) 
        except:
            pass
        if self.result_done.isset():
            return

现在,如果maxtimeout设置为500秒并且我从另一个线程设置了result_done标志,则此线程将在退出之前等待500秒(如果队列中没有数据)。

我想要实现的是所有线程与当前进程一起优雅地死掉,只要从进程的任何线程设置了result_done事件,就可以正确地终止db,websocket,http连接等。

我正在使用python多进程库来创建生成这些线程的进程。

更新:所有线程都是守护进程=真正的线程。

1 个答案:

答案 0 :(得分:0)

为避免等待maxtimeout时间,您可以使用Event.wait() method

def run(self):
    while not self.result_done.is_set():
        try:
            val = self.job_queue.get_nowait()
        except Empty:
            if self.result_done.wait(1): # wait a second to avoid busy loop
                return 
如果在通话期间设置了该事件,则

Event.wait(timeout)无需等待完整的timeout即可返回。