我寫了下面的幫助函數來並行運行任意函數。Pythons多處理池不做任何事
import multiprocessing
def runParallel(fns=[], args=[]):
print('Starting multiprocessing with %i cores' % (multiprocessing.cpu_count() - 1))
pool = multiprocessing.Pool(processes=multiprocessing.cpu_count() - 1)
for fn, arg in zip(fns, args):
pool.apply_async(fn, (arg,))
pool.close()
pool.join()
我調用函數與函數的調用itertools.repeat和文件名列表
runParallel(itertools.repeat(self.processFile), fileNamesAndPaths)
processFile與簽名
def processFile(self, filename):
一類方法和一個開始'print'語句永遠不會被執行。程序只是在輸出「開始3核多處理」之後結束。使用過程
從多處理一般的作品,但它淹沒我的CPU與它不能處理過程的量,並最終凍結,但至少processFile函數被調用
from multiprocessing import Process
def runParallel(fns=[], args=[]):
proc = []
for fn, arg in zip(fns, args):
p = Process(target=fn, args=(arg,))
p.start()
proc.append(p)
for p in proc:
p.join()
這就是爲什麼我想因爲根據我的理解,它可以處理任何給定時間的進程數量。
如果有幫助,我在2.7位的64位Windows機器上運行它。
你是說它適用於'Process'和'fn' ==實例方法嗎? –
@PeterWood是的,但是,因爲我在列表中有大約300個文件,程序創建了300個進程,這些進程在20秒後崩潰了我的電腦。 – NoMonkey