让我们考虑一个函数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
函数。你知道吗例如:
然后你可以像
p.map(fixed_para_wrapper, dynamics)
那样使用它。你知道吗相关问题 更多 >
编程相关推荐