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")
我正在尝试使用具有多个参数的多处理来打印虚拟值,但这似乎不起作用。我收到错误
"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")