我有几个算法,我想并行运行。我需要他们的返回值,不能修改他们自己的功能。
这使得使用from multiprocessing import Process
变得很困难,因为这就是为什么如果不能传递一个管道来处理或类似的函数,我就不能获得返回值。
然后,我尝试使用Pool
,但随后我必须编写一个包装器,以获得一个函数,该函数接受算法的参数,然后调用算法。但是python抱怨说它不能对本地对象进行腌制。
那我能做什么。
发布于 2022-11-13 05:24:44
我假设错误的原因是在使用派生创建新进程(如Windows )的平台上使用非全局函数(因为您的包装器)。
但你的问题有点含糊不清,我不知道你为什么需要包装。让我们假设您有三个算法,它们接受int
并返回int
。那么,为什么下面这些不起作用呢?
from multiprocessing import Pool
def algorithm1(x):
return x ** 2
def algorithm2(x):
return x ** 3
def algorithm3(x):
return 2 * x
def main():
algorithms = (algorithm1, algorithm2, algorithm3)
pool = Pool(3)
async_results = [pool.apply_async(algorithm, args=(3,)) for algorithm in algorithms]
results = [async_result.get() for async_result in async_results]
print(results)
pool.close()
pool.join()
if __name__ == '__main__':
main()
指纹:
[9, 27, 6]
https://stackoverflow.com/questions/74412664
复制