gpt4 book ai didi

python - 清理多处理中的子进程

转载 作者:太空宇宙 更新时间:2023-11-03 20:12:09 24 4
gpt4 key购买 nike

考虑子进程的简单设置。基本上,这是一个生产者(父)-消费者(子)场景。

class Job:
def start_process(self):
self.queue = multiprocessing.Queue(3)
self.process = multiprocessing.Process(target=run,
args=(self.queue))

def run(queue):
while True:
item = queue.get()
....

如果我在父进程上执行kill -9,子进程将永远挂起。我确信它会像 subprocess.Popen 一样收到 SIGHUP - 当 python 进程退出时,popened 也会退出。知道如何解决子清理问题吗?

最佳答案

如果 daemon 参数对您不起作用,您可以捕获 SIGINT 信号并让它设置一个 bool 值以退出子级中的 while 循环。即..

import signal

g_run_loops = True
def signal_handler(signum, frame):
global g_run_loops
g_run_loops = False

signal.signal(signal.SIGINT, signal_handler)

def run(queue):
global g_run_loops
while g_run_loops:
item = queue.get()
....

请注意,这不适用于 SIGKILL (kill -9),但适用于 SIGINT (kill -2)。

关于python - 清理多处理中的子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58651281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com