簡體   English   中英

多處理Python

[英]Multiprocessing Python

我有一台4 cpus的linux機器。

我有一個長時間運行的程序,需要在1024個主機上同時執行並將結果返回。

ipArrayList -> Contains list of host ips.

下面的程序運行正常,但需要很長時間,有時會掛幾天。

import multiprocessing

pool = multiprocessing.Pool(100)
pool.map(long_running_module,ipArrayList)
pool.close()
pool.join()

僅在輸入較少(ipArrayList的大小)的情況下,以下程序才能運行得更快。 如果ipArray列表中的IP數量很大,那么有時我會遇到緩沖區空間問題。([Errno 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(paramiko)連接到ipArrayList中的每個IP。 它在主機內部進行長時間運行的計算,然后將結果返回到同步列表。

請幫助我有效地對此進行編程。

我同意使用池是不是最好的,如果你剛剛4個核心,您可以使用“地圖”功能,而不是,去看一下這個

map(f, S)

f 是一個帶有一個參數並返回值的函數。

S 是任意迭代的。

>>> def add100(x):
...     return x+100
... 
>>> map(add100, (44,22,66))
[144, 122, 166]

但是,由於您需要在1024個主機上同時執行並返回結果,因此我強烈建議您使用分布式平台。 Python中有其中一些,但是SCOOP有很好的文檔記錄和維護。

暫無
暫無

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

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