Python - 对多个参数使用多处理不起作用

Python - using multiprocessing with multiple args doesn't work

我正在尝试使用具有多个参数的多处理来打印虚拟值,但这似乎不起作用。我收到错误

"f() missing 2 required positional arguments:..."

对于以下代码:

from multiprocessing import Pool

class tryProcessing:
    def f(self, arr, arg1, arg2):
        print(arr + " " + arg1 + " " + arg2)

    def func(self, arr, arg1, arg2):
        arg1 = "hi"
        arg2 = "hello"
        arr_a = ['1','2']
        arr_b = ['3','4','5']
        p = Pool(Processes=2)
        p.map(self.f, [[a, arg1, arg2], [b, arg1, arg2]])
        p.close

我做错了什么?

P.s。 ,他做了类似的事情,我不明白为什么他的作品,而我的作品却没有。

你传递一个参数,它就是一个完整的列表。


test = map(lambda x : x, [[a, arg1, arg2], [b, arg1, arg2]]) 
print(next(test)) 

您可以像这样更新您的功能。


def f(self, *args):
    arr, arg1, arg2 = args
    print(f"{arr} {arg1} {arg2}")

您正在寻找 starmap,它期望可迭代对象包含嵌套的可迭代参数,这些参数将被扩展为函数参数。它使用星号 (splat) 符号来扩展,因此得名。

P.S。您实际上从未在函数末尾调用 p.close

与您在 link 上发布的解决方案相比,您的方法有几个不同之处。

  • 注意位置参数 def someaction(a, b=1, c=2, d=3)
  • 而且你没有位置参数def f(self, arr, arg1, arg2)

这或许可以解释您遇到的上述错误。 调整你的代码这有效

from multiprocessing import Pool

class tryProcessing:
    def f(self, arr):
        print(arr)

    def func(self, arr, arg1, arg2):
        arg1 = "hi"
        arg2 = "hello"
        arr_a = ['1','2']
        arr_b = ['3','4','5']
        p = Pool(2)

        data = [["a1", "b1", "c1", "d1"],
        ["a2", "b2", "c2", "d2"],
        ["a3", "b3", "c3", "d3"], ]

        p.map( self.f, data)
        p.close

t = tryProcessing()
t.func("adfasf", "dfaf", "daf")