我一直在尝试将字符串传递到函数中。
例如,对于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_3[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
其中map将把迭代表中的每个字符串发送到somefunc。
然而,当你把你的列表分成两个元组时:
input_list_2=[('string1','string2'),('string3','string4')]
它将元组CCD_ 1作为参数发送到CCD_。
如果您真的想以这种方式对它们进行分块,那么您的函数必须处理一个元组。
def somefunc(tuple):
##string specific method
for x in tuple:
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