簡體   English   中英

如何正確地使用f(var,param1,param2,...)進行多重處理

[英]How to use properly multiprocessing with f(var, param1, param2, …)

讓我們考慮一個函數f,它具有一個要映射(變化)的參數和幾個固定參數:

f(var, param1, param2, param3, param4)

param i是固定值(例如int,float,booleans等),而var參數是對象列表。

當前方法:

p1 = 0
p2 = 200
var = [[Object(x, p1, p2), Object(y, p1, p2), Object(z, p1, p2 = test = True)] for x in range(5) for y in range(10) for z in range(25)]

for v in var:
    f(v, param1, param2, param3, param4)

由於對var一個元素的計算不依賴於其他元素,因此我實際上對列表var切片,並使用N個不同的切片N次啟動程序,因此我在計算機的N個內核上運行了N個程序。 這是一種手動處理方式。 但是,跟蹤已完成的操作和仍要計算的內容並不是很方便。

我想直接在程序中實現多線程/多處理。

沒有fix參數,我發現這種方式似乎可行:

from multiprocessing import Pool

p = Pool(processes = 16) # 16 cores.
p.map(f, var)
p.terminate()

在上面的小代碼中,我沒有使用相同的f函數,僅用於測試目的。 我該如何使用具有固定參數的f函數來做到這一點?

什么是最好的方法? 謝謝!

python版本:3.6

編輯:我也想對進度進行跟蹤。 目前,我的代碼是:

for i,v in enumerate(var):
    print ("{} / {}".format(i, len(var))
    f(v, param1, param2, param3, param4)

可以通過多處理來做到這一點嗎?

如果我對您的理解很好,那么您的問題可以重寫為:

如何使用多重處理輕松地映射具有幾個固定參數的函數?

p.starmap(f, [(v, fix1, fix2, fix3) for v in dynamics])

我認為您可以包裝f函數。

例如:

def fixed_para_wrapper(dynamic):
    return f(dynamic, fix1, fix2, fix3)

然后,您可以像p.map(fixed_para_wrapper, dynamics)一樣使用它。

暫無
暫無

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

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