我有一個Linux機器4 cpu。多重處理Python
我有一個長期運行的程序,我需要在1024個主機上同時執行並獲得結果。
ipArrayList -> Contains list of host ips.
以下程序運行良好,但需要很長的時間,有時它掛起天:
import multiprocessing
pool = multiprocessing.Pool(100)
pool.map(long_running_module,ipArrayList)
pool.close()
pool.join()
以下程序只在更少的輸入(ipArrayList的尺寸)的情況下的運行速度更快。如果IP地址在ipArray列表中的號碼是巨大的,然後有時候我碰到緩衝空間的問題。([錯誤105]沒有可用的緩衝空間)
job = []
for ip in ipArrayList:
p = multiprocessing.Process(target=long_running_module, args=(ip))
job.append(p)
p.start()
for j in job:
j.join()
的long_run_module通過ssh連接到每個在ipArrayList的ip(的paramiko)。它在主機內進行一些長時間運行計算,然後將結果返回到同步列表。
請幫助我有效地編程。
我懷疑當你溢出參數緩衝區時,雖然我不確定。嘗試在列表中發送:'multiprocessing.Process(target = long_running_module,args =(ipArray,))'。確保在處理過程中期待列表。 –
爲什麼4個CPU上有100個池? –
建議:使用https://www.gnu.org/software/parallel/ –