[英]How can I bound an lmfit parameter based on another parameter such that param1 < 0.5*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.