Python自定义进程池:如何等待多个进程中的一个?

Python自定义进程池:如何等待多个进程中的一个?,python,python-multiprocessing,Python,Python Multiprocessing,我想创建自己的进程池,类似于: 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():

我想创建自己的进程池,类似于:

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\u alive()
编码了一个活动等待,但我发现它一点也不干净

请注意,我不能使用队列,因为我需要等到最后一刻才决定运行哪个作业

我无法使用python
multiprocessing.Pool
,因为
Pool.join()
将等待所有作业终止。在我的例子中,在执行
apply\u async()
之前,我想知道是否有一个工人是空闲的,我看不到任何方法可以这样做

我无法将
job\u args=get\u job\u from\u db()
放在
do\u job()
中,因为我正在运行MySQL事务:每个工人可能会得到相同的作业(并发问题)


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

那么,当某个进程返回结果时,是否要停止该进程??你的问题很难理解。似乎你发布了一些随机的基本代码,我希望始终有10个进程在运行:一个进程终止后,我想启动另一个进程。所以你想要一个池!以google或stackoverflow为例,这是我做的第一件事,当然:Pool.join()将等待所有作业终止,而不仅仅是一个作业。在我的例子中,我想知道在执行apply_async()之前是否有一个工人是自由的,我看不到任何方法可以做到这一点。然后发布代码,因为你没有使用它,我们也不是知道它的魔术师。要等待池工作,必须执行Pool.close()和Pool.join()