首页 > 解决方案 > Python 自定义进程池:如何等待众多进程中的一个?

问题描述

我想创建自己的进程池,例如:

from multiprocessing import Process
import time
NB_PROCESS = 10
procs = set()

def do_job(args):
    *** some processing ***

if __name__ == '__main__':
    while True:
        for p in list(procs):
            if p.is_alive():
                print(f'Proc {p.pid} running...')
            else:
                print(f'Proc {p.pid} terminated')
                procs.remove(p)

        for i in range(NB_PROCESS-len(procs)):
            job_args=get_job_from_db()
            if job_args:
                p = Process(target=do_job, args=(job_args,))
                p.start()
                procs.add(p)

        time.sleep(1)

我希望始终运行 10 个进程:我想在一个(不是全部)进程终止后立即启动另一个进程。

实际上我通过使用编写了一个主动等待,.is_alive()但我发现它根本不干净。

请注意,我不能使用队列,因为我需要等待最后一刻才能决定运行什么作业。

我不能使用 python multiprocessing.Pool,因为Pool.join()将等待所有作业被终止。就我而言,我想知道一个工人在做之前是否有空apply_async(),我看不到任何方法可以做到这一点

job_args=get_job_from_db()我在do_job()运行 MySQL 事务时无法输入:每个工作人员都可能得到相同的工作(并发问题)

如何继续等待池中的一个进程终止?

标签: pythonpython-multiprocessing

解决方案


推荐阅读