如何正确使用f(var,param1,param2,…)的多重处理

2024-06-28 19:21:42 发布

您现在位置:Python中文网/ 问答频道 /正文

让我们考虑一个函数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)

多处理也能做到这一点吗?你知道吗


Tags: 方法函数in程序for参数objectvar
1条回答
网友
1楼 · 发布于 2024-06-28 19:21:42

如果我理解你的意思,你的问题可以改写成:

如何使用多重处理轻松地映射具有多个固定参数的函数?你知道吗

比如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)那样使用它。你知道吗

相关问题 更多 >