可以说我手头有10000个任务。如何并行处理它们,同时随时运行8个进程?任务完成后,应立即提取下一个任务以执行。
for e in arr:
pr=Process(target=execute, args=(q,e))
pr.start()
pr.join()
我要这样做,因为我的CPU只有8个硬件线程。由于切换开销,一次用10000个任务进行存储将减慢整体计算的速度。我的记忆也很有限。
( 编辑 :这不是this question的副本,因为我不问如何派生一个进程。)
答案 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()