如何在Python中限制和排队进程

时间:2018-11-12 05:08:38

标签: python python-3.x process parallel-processing python-3.6

可以说我手头有10000个任务。如何并行处理它们,同时随时运行8个进程?任务完成后,应立即提取下一个任务以执行。

for e in arr:
   pr=Process(target=execute, args=(q,e))
   pr.start()
   pr.join()

我要这样做,因为我的CPU只有8个硬件线程。由于切换开销,一次用10000个任务进行存储将减慢整体计算的速度。我的记忆也很有限。

编辑 :这不是this question的副本,因为我不问如何派生一个进程。)

2 个答案:

答案 0 :(得分:0)

我认为,如果为join语句拆分“ for”循环,则可能会解决问题。现在,您开始一个分支,并希望结果返回并执行另一个分支过程。而且没有货叉现在关闭。

for e in arr:
   pr=Process(target=execute, args=(q,e))
   pr.start()

for e in arr: 
   pr.join()

或者只是使用pool和map函数。

答案 1 :(得分:0)

要使Pool在这里工作,我也需要调用get()。

from multiprocessing import Pool
pl=[]
pool = Pool(8)
for e in arr:
   pl.append(pool.apply_async(execute, (e))
for pl2 in pl: pl2.get()