如何使用 Pythons Multiprocessing 库的 Process class 多次 运行 一个函数?

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

我有一个函数可以模拟化学反应的随机系统。我现在想多次使用 Pythons Multiprocessing 库中的 Process class 到 运行 随机模拟函数。

我尝试了以下方法:

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 和过程的 args 参数,但我只是在 [=15= 的减速上得到 SyntaxError: invalid syntax ]

以这种方式使用像 parallelfunc 这样的函数的方法在使用 pool.map 时有效 我只是传递 parallelfunc 后跟 1 - 50 的列表。

但我不知道这里出了什么问题。

有什么建议 干杯。

那是因为你给出了太多的论点。 尝试

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

这允许你接受多个参数

我认为错误是因为您将 50 个参数作为 parallelfunc 的参数,您将其定义为仅一个参数。也许尝试添加 list() 以便它只有一个参数,其中包含 50 个数字。不过不知道是不是人数多了