首页 > 解决方案 > 如何并行执行具有不同参数的定义函数

问题描述

我有一个带有多个参数的函数。我需要一个代码块,它将与 3 组不同的参数并行执行我的函数,然后保持在那里直到所有进程都完成,然后再运行我的其他代码块。

我试过了,但结果不是我需要的。

import multiprocessing
from itertools import product

bs = []
def a(i):
    for x in range(i):
        print(i)
        b = x + 1
        bs.append(b)
    return bs

if __name__ == '__main__':
    i = range(4)
    with multiprocessing.Pool(processes=3) as pool:
        result = pool.starmap(a, product(i))
    print(result)

结果:

1
2
2
3
3
3
[[], [1], [1, 1, 2], [1, 1, 2, 1, 2, 3]]

我已经阅读了人们使用Processfrom 的线程multiprocessing.join()但我对基于它们编写代码的理解还不够。

编辑:

我也试过这个并得到一个错误:

from multiprocessing import Process

bs = []
def a(i):
    for x in range(i):
        print(i)
        b = x + 1
        bs.append(b)
    return bs

if __name__ == '__main__':
    p1 = Process(target=a(2))
    p1.start()
    p2 = Process(target=a(3))
    p2.start()
    p1.join()
    p2.join()

结果:

2
2
3
3
3
Process Process-1:
Traceback (most recent call last):
  File "E:\Python38-32\lib\multiprocessing\process.py", line 315, in _bootstrap
    self.run()
  File "E:\Python38-32\lib\multiprocessing\process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
TypeError: 'list' object is not callable
Process Process-2:
Traceback (most recent call last):
  File "E:\Python38-32\lib\multiprocessing\process.py", line 315, in _bootstrap
    self.run()
  File "E:\Python38-32\lib\multiprocessing\process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
TypeError: 'list' object is not callable

由于多处理有点复杂,你能帮我解决这个问题吗?谢谢你。

标签: pythonfunctionparallel-processingmultiprocessing

解决方案


推荐阅读