使用多处理控制Python中的进程数
我想控制使用多处理软件包时产生的进程数 假设我只希望同时激活三个进程。我知道的唯一方法是:使用多处理控制Python中的进程数,python,multithreading,process,multiprocessing,Python,Multithreading,Process,Multiprocessing,我想控制使用多处理软件包时产生的进程数 假设我只希望同时激活三个进程。我知道的唯一方法是: import multiprocessing import Queue def worker(arg): ## Do stuff return returnvalue argument = list(1,2,3,4,5,6) aliveprocesses = 0 jobs = Queue.Queue() for arg in argument: while jobs.qsize(
import multiprocessing
import Queue
def worker(arg):
## Do stuff
return returnvalue
argument = list(1,2,3,4,5,6)
aliveprocesses = 0
jobs = Queue.Queue()
for arg in argument:
while jobs.qsize() > 2:
jobs.get().join()
p = multiprocessing.Process(target=worker,args=(arg,))
jobs.put(p)
p.start()
基本上,我只知道如何使用process.join()函数一次监视一个进程。我监视最旧的进程,直到它完成,然后创建一个新进程。对于我的程序来说,最老的进程平均应该比其他进程先完成。但谁知道呢?也许另一个过程会先结束,我无法知道
我能想到的唯一选择是这样的:
import multiprocessing
import time
def worker(arg):
## Do stuff
return returnvalue
argument = list(1,2,3,4,5,6)
aliveprocesses = 0
jobs = set()
for arg in argument:
while aliveprocesses > 2:
for j in jobs:
if not j.is_alive():
aliveprocesses -= 1
break
time.sleep(1)
p = multiprocessing.Process(target=worker,args=(arg,))
jobs.put(p)
p.start()
aliveprocesses += 1
在上述函数中,您将检查所有进程是否仍处于活动状态。如果它们都还活着,你先睡一会儿,然后再检查,直到出现一个死进程,然后再生成一个新进程。这里的问题是,据我所知,time.sleep()函数不是等待进程结束的特别有效的方法
理想情况下,我想要一个类似Process.join()的函数“superjoin()”,它只使用一组进程对象,当其中一个进程返回时,superjoin()就会返回和superjoin()本身并不使用time.sleep()函数,也就是说,它没有被“推卸责任”因为您似乎只有一个(并行)任务,而不是单独管理进程,您应该使用更高级别的函数,这样可以更轻松地管理进程的数量 您不能
加入
池,但您有执行此类任务的阻塞调用(例如)
如果您需要更细粒度的控制,您可能需要进行调整