根据程序的需要,我使用了子线程内的多线程来并行任务处理。在这个“深”多线程中,可能会遇到超时、失败等潜在问题。
我想问,当其中一个子线程引发异常或失败时,如何杀死所有子线程(称为上面的“深”多线程)。
你不应该真的试图杀死线程。
如果线程由于某些不相关的情况需要终止,那么需要[以某种方式]通知它。 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()