如何使用 Pythons Multiprocessing 库的 Process 类多次运行一个函数?
Posted
技术标签:
【中文标题】如何使用 Pythons Multiprocessing 库的 Process 类多次运行一个函数?【英文标题】:How can use the Process class of Pythons Multiprocessing library to run a function multiple times? 【发布时间】:2020-11-11 20:41:11 【问题描述】:我有一个模拟化学反应随机系统的函数。我现在想使用 Pythons Multiprocessing 库中的 Process 类来多次运行随机模拟函数。
我尝试了以下方法:
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:\nsim_time")
但这会导致错误TypeError: parallelfunc() takes 1 positional argument but 50 were given
然后我尝试将range(1, 51)
传递给parallelfunc
和进程的args
参数,但我只是在parallelfunc
减速时得到SyntaxError: invalid syntax
以这种方式使用parallelfunc
之类的函数的方法在使用pool.map
时有效,我只需传递parallelfunc
后跟一个从1 到50 的列表。
但我不知道这里出了什么问题。
任何建议 干杯。
【问题讨论】:
【参考方案1】:我认为错误是因为您将 50 个参数作为并行函数的参数,而您将其定义为只有一个参数。也许尝试添加 list() 所以它只有一个参数,其中包含 50 个数字。不过不知道是不是数字多。
【讨论】:
【参考方案2】:那是因为你给出了太多的论据。 试试
def parallelfunc(*v):
gillespie_tau_leaping(start_state, LHS, stoch_rate, state_change_array)
这允许你接受多个参数
【讨论】:
如果你愿意,你可以用**代替*以上是关于如何使用 Pythons Multiprocessing 库的 Process 类多次运行一个函数?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用pythons内置map和reduce函数计算字符串中的字母频率
如何将 pythons Decimal() 类型转换为 INT 和指数
如何在 openSUSE 上安装 Pythons MySQLdb 模块?