如何维护进程池

How to maintain a pool of processes

提问人:Yedidya kfir 提问时间:11/15/2023 最后编辑:jsbuenoYedidya kfir 更新时间:11/15/2023 访问量:59

问:

我有一个项目,在其中我运行多个进程来执行多个作业,这些作业通过队列分发。

queue = multiprocessing.Queue()
process = multiprocessing.spawn(
    run_alg,
    args=(queue,),
    nprocs=process_num,
    join=False,
)
process.join()

但是,进程可能会在运行过程中停止工作或崩溃。 我想创建一个包含 x 个进程的池,每次关闭进程时,都会创建一个新进程来取代它,直到队列为空。

有可能吗,如何?

多处理 python-multiprocessing multiprocessing-manager

评论

0赞 Brian61354270 11/15/2023
什么?multiprocessing.spawn
0赞 Brian61354270 11/15/2023
你只是在寻找一个游泳池吗?为什么进程“停止工作或崩溃”?如果是由于异常,则不会导致池工作线程终止。请参见多处理行为。泳池例外?
0赞 Yedidya kfir 11/15/2023
该过程可能由于多种原因而失败,例如,它可能会收到 sigkill,这不会引发异常
0赞 Mark Setchell 11/23/2023
你是怎么接受我的建议的?
0赞 Yedidya kfir 11/24/2023
你写了伪代码,在实践中我遇到了错误,我搜索了另一条路线

答:

0赞 Mark Setchell 11/15/2023 #1

我会启动线程。每个线程都进入一个非常简单的循环:x

while True:
  Get args from queue, blocking till received
  Start subprocess with args

如果子进程崩溃,线程会再次运行并获取另一个作业,或者可以重试该作业。