簡體   English   中英

Python 循環內的多處理池

[英]Python multiprocessing pool inside a loop

我有一個循環,在每次迭代中,都有一些任務應該並行執行。 我需要等待任務在當前迭代中並行運行,然后 go 到下一次迭代。
例如,

a = [1,2,3,4,5,6,7,8,9,10]
pool = Pool(mp.cpu_count())

def fun1(x):
   ....

def fun2(x):
   ....

def fun3(x):
   ....

for x in a:
  pool.map(fun1, x)
  pool.map(fun2,x)
  pool.map(fun3,x)
  pool.close()
  pool.join()

這是正確的方法嗎? 或者我如何實現這一目標?

根據您的評論,您希望為x=1並行運行fun1, fun2, fun3 ,等到它們全部完成,然后繼續執行x=2並重復。 這可以這樣實現:

import multiprocessing as mp
a = [1,2,3,4,5,6,7,8,9,10]

def fun1(x):
   ....

def fun2(x):
   ....

def fun3(x):
   ....

for x in a:
    # Create separate process for each function 
    p1 = mp.Process(target=fun1, args=(x))
    p2 = mp.Process(target=fun2, args=(x))
    p3 = mp.Process(target=fun3, args=(x))
    # Start all processes 
    p1.start()
    p2.start()
    p3.start()
    # Wait till they all finish and close them 
    p1.join()
    p2.join()
    p3.join()

或者,如果您想為a中的所有x運行fun1 ,然后運行fun2然后fun3 ,您可以使用多處理池來代替:

import multiprocessing as mp
a = [1,2,3,4,5,6,7,8,9,10]
pool = mp.Pool(mp.cpu_count())

def fun1(x):
   ....

def fun2(x):
   ....

def fun3(x):
   ....

# Run fun1 for all values in a
pool.map(fun1, a)
# Run fun2 for all values in a
pool.map(fun2, a)
# Run fun3 for all values in a
pool.map(fun3, a)
# Close pool 
pool.close()
pool.join()

在多處理pool情況下,除非pool.map(fun1, a)完成運行,否則 pool.map( pool.map(fun2, a)不會運行。 有關 Python 的multiprocessing模塊的更多信息,我強烈建議您閱讀文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM