Multiprocessing:将数组列表传递(和迭代)到池映射中

问题描述 投票:1回答:1

我一直在尝试将字符串传递到函数中。

例如,对于input_list_1,我发现该函数的返回结果部分正确-只有与处理器数量匹配的前n个是正确的。其余输出不正确。我尝试了chunksize输入和map_async,但没有运气。

pool = mp.Pool(processes=2)
input_list_1=['string1','string2','string3','string4']
results=pool.map(somefunction, input_list_1)

但是,当我按input_list_2(每个与处理器数量匹配的数组)中所示断开输入并传递input_list_2 [0]和input_list_2 [1]作为单独的参数时,我发现该函数的返回值更可预测,并且与我希望。

是否可以通过input_list_2作为参数并进行某种类型的迭代?我已经尝试了所有与可迭代项相关的内容-imap,map_async,starmap。

pool = mp.Pool(processes=2)
input_list_2=[('string1','string2'),('string3','string4')]
results=pool.map(somefunction, input_list_2)
python list dictionary multiprocessing pool
1个回答
1
投票

您可能有类似这样的内容:

def somefunc(str):
   ##string specific method
   print(str.strip())

pool = mp.Pool(processes=2)
input_list=['string1 ','string2 ','string3 ','string4']
pool.map(somefunction, input_list)

string1
string2
string3
string4

映射将迭代中的每个字符串发送到somefunc的位置。

但是,当您将列表分成两个元组时:

input_list_2=[('string1','string2'),('string3','string4')]

正在将元组('string1','string2')发送为somefunc的参数。

如果您真的想以这种方式对它们进行分块,则您的函数必须处理一个元组。

def somefunc(tupple):
   ##string specific method
   for x in tupple:
      print(x.strip())


pool = mp.Pool(processes=2)
input_list_2=[('string1 ','string2 '), ('string3 ','string4')]
pool.map(somefunction, input_list_2)


string1
string2
string3
string4
© www.soinside.com 2019 - 2024. All rights reserved.