【发布时间】:2020-07-24 22:23:24
【问题描述】:
我一直在尝试将字符串传递给函数。
例如,对于 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)
【问题讨论】:
-
somefuction只处理字符串而不处理元组。您将每个元组发送到somefunction而不是每个string。不要担心划分你的列表。这就是 map 的用途,在 string1 或 string2 完成之前它不会开始处理 string3
标签: python list dictionary multiprocessing pool