我已經(jīng)瀏覽了大量multiprocessing關(guān)于 SO 和文檔的答案,要么這些問題真的很老(Python 3.X 自那以后進(jìn)行了大量改進(jìn))要么沒有找到明確的答案。如果我可能錯過了一些相關(guān)的東西,請為我指明正確的方向。我從我在文件夾模塊中定義的一個簡單函數(shù)開始,因?yàn)槲艺谶\(yùn)行 Jupyter Notebook,并且似乎由于沖突,您只能multiprocessing在導(dǎo)入的函數(shù)上運(yùn)行:def f(a): return a * 100構(gòu)建了一些測試數(shù)據(jù)并運(yùn)行了一些測試:from itertools import zip_longestfrom multiprocessing import Process, Pool, Array, Queuefrom time import timefrom modules.test import *li = [i for i in range(1000000)]列表理解:真的很快start = time()tests = [f(i) for i in li]print(f'Total time {time() - start} s')>> Total time 0.154066801071167 s此處SO 示例的答案:11 秒左右start = time()results = []if __name__ == '__main__': jobs = 4 size = len(li) heads = list(range(size//jobs, size, size//jobs)) + [size] tails = range(0,size,size//jobs) pool = Pool(4) for tail,head in zip(tails, heads): r = pool.apply_async(f, args=(li[tail:head],)) results.append(r) pool.close() pool.join() # wait for the pool to be doneprint(f'Total time {time() - start} s')>>Total time 11.087551593780518 s還有Process一個我不知道是否適用于上面的例子。我不熟悉multiprocessing但確實(shí)理解創(chuàng)建新實(shí)例有一些開銷,但隨著數(shù)據(jù)的增長,它應(yīng)該證明開銷是合理的。我的問題是,根據(jù) Python 3.x 的當(dāng)前性能,是否使用multiprocessing與上述類似的操作仍然相關(guān),或者甚至應(yīng)該嘗試一些操作。如果是,如何將它們應(yīng)用于并行化工作負(fù)載。我讀過和理解的大多數(shù)示例都用于網(wǎng)絡(luò)抓取,當(dāng)在一個接收信息的進(jìn)程中有實(shí)際空閑時間時,并行化是有意義的,但是如果您正在運(yùn)行諸如列表或字典之類的計(jì)算,將如何處理它.
添加回答
舉報(bào)
0/150
提交
取消