簡體   English   中英

如何使用 Pythons Multiprocessing 庫的 Process class 多次運行 function?

[英]How can use the Process class of Pythons Multiprocessing library to run a function multiple times?

我有一個模擬化學反應隨機系統的 function。 我現在想使用 Pythons Multiprocessing 庫中的 Process class 多次運行隨機模擬 function。

我嘗試了以下方法:

v = range(1, 51)
def parallelfunc(v):     
    gillespie_tau_leaping(start_state, LHS, stoch_rate, state_change_array)


if __name__ == '__main__':
    start = datetime.utcnow()
    p = Process(target=parallelfunc, args=(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50))
    p.start()    
    p.join()
    end = datetime.utcnow()
    sim_time = end - start
    print(f"Simualtion utc time:\n{sim_time}")

但這會導致錯誤TypeError: parallelfunc() takes 1 positional argument but 50 were given

然后我嘗試將range(1, 51)傳遞給parallelfunc和 process 的args參數,但后來我得到SyntaxError: invalid syntax on the deceleration of parallelfunc

以這種方式使用 function 之類的parallelfunc的方法在使用pool.map時有效,我只傳遞了parallelfunc ,然后是 1-50 的列表。

但我無法弄清楚這里出了什么問題。

任何建議干杯。

那是因為你給了太多的 arguments。 嘗試

def parallelfunc(*v):     
     gillespie_tau_leaping(start_state, LHS, stoch_rate, state_change_array)

這允許您采取多個 arguments

我認為錯誤是因為您為並行函數提供了 50 個參數作為 arguments,您將其定義為只有一個參數。 也許嘗試添加 list() 所以它只有一個參數,其中包含 50 個數字。 但是,我不知道數字的數量是否很高。

暫無
暫無

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

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