我一直在尝试将字符串传递到函数中。
例如,对于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)
您可能有类似这样的内容:
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