Python 多线程 - 当其中一个子线程引发异常或失败时如何杀死所有子线程

问题描述 投票:0回答:1

根据程序的需要,我使用了子线程内的多线程来并行任务处理。在这个“深”多线程中,可能会遇到超时、失败等潜在问题。

我想问,当其中一个子线程引发异常或失败时,如何杀死所有子线程(称为上面的“深”多线程)。

python multithreading multitasking
1个回答
0
投票

你不应该真的试图杀死线程。

如果线程由于某些不相关的情况需要终止,那么需要[以某种方式]通知它。 threading.Event对此很有用。

这是您可以采用的模式。它要求每个线程时不时地检查一个全局事件。

我们创建一个全局事件,其初始状态已设置。启动一些线程。每个线程在检查事件状态的循环内完成其工作。

如果一个线程出现问题,它应该清除全局事件。因此所有其他线程都将终止。

from threading import Thread, Event
from time import sleep
from random import randint

def process():
    while global_event.is_set():
        sleep(1) # do work
        if randint(1, 50) == 25: # simulate failure
            print("Failing")
            global_event.clear()
    print("Ending")

if __name__ == "__main__":
    threads = []
    (global_event := Event()).set()
    for _ in range(10):
        (thread := Thread(target=process)).start()
        threads.append(thread)
    for thread in threads:
        thread.join()
© www.soinside.com 2019 - 2024. All rights reserved.