我一直在試圖讓我的頭多處理。問題是我遇到的所有例子都不符合我的情況。我想要多進程或線程工作,涉及從參數共享列表,現在當然我不希望從上述列表中的項目被兩次處理,因此需要將工作劃分到每個新的線程/進程(或跨進程)。多處理建議
任何意見,我應該看的方法將不勝感激。
我知道我的代碼在任何方面都是不正確的,它只是幫助形象化我試圖解釋的東西。
SUDO
def work_do(ip_list)
for ip in list
ping -c 4 ip
def mp_handler(ip_range):
p = multiprocessing.Pool(4)
p.map(work_do, args=(ip_range))
ip_list = [192.168.1.1-192.168.1.254]
mp_handler(ip_list)
編輯:
一些工作守則
import multiprocessing
import subprocess
def job(ip_range):
p = subprocess.check_output(["ping", "-c", "4", ip])
print p
def mp_handler(ip_range):
p = multiprocessing.Pool(2)
p.map(job, ip_list)
ip_list = ("192.168.1.74", "192.168.1.254")
for ip in ip_list:
mp_handler(ip)
如果你運行上面的代碼,你會發現這兩個IP的被運行兩次。我如何管理流程以僅處理列表中的唯一數據?
感謝您的回覆@Games Brainiac,我測試了上面的代碼,它看起來很完美。然而,將它實現到我自己的代碼似乎工作,直到仔細檢查表明,查詢對IP的響應以不同的IP返回。 IE的數據似乎混在一起,請求和響應無關, – iNoob 2014-10-12 01:11:43
@iNoob您需要修改'do_work'函數來打印結果的元組,而不是僅僅打印到控制檯。我向你展示的是一個你可以建立的簡單例子。 – 2014-10-12 03:51:12
@iNoob:你不應該在沒有鎖的情況下從多個進程中打印。爲了避免混合輸出;您可以將結果報告移到主流程中,如我的答案。如果你想要的只是一個狀態,那麼在這裏沒有必要使用'mp.Process()'。 'ping'已經是一個單獨的過程,參見[我在答案中提供的鏈接](http://stackoverflow.com/a/12102040/4279)。 – jfs 2014-10-12 04:08:27