从同一进程的一个线程中终止所有线程和进程

2024-10-03 09:12:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个进程产生了两种类型的线程类。一个线程负责消耗作业队列(此类的100个线程通常正在运行)。第二个线程是终止线程。我使用的是从thread2设置的result\u done标志,问题是我的thread1等待X秒,然后检查是否设置了result\u done标志。你知道吗

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

现在,如果maxtimeout设置为500seconds,并且我从另一个线程设置result\u done标志,那么这个线程将等待500秒,然后退出(如果队列中没有数据)。你知道吗

我想要实现的是,所有线程都会随着当前进程优雅地消亡,只要进程的任何线程设置了result\u done事件,就会正确地终止db、websocket、http连接等。你知道吗

我使用python多进程库来创建产生这些线程的进程。你知道吗

更新:所有线程都是daemon=True线程。你知道吗


Tags: selftrue类型队列进程标志def作业
1条回答
网友
1楼 · 发布于 2024-10-03 09:12:40

为了避免等待maxtimeout时间,您可以使用^{} 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。你知道吗

相关问题 更多 >