我无法理解pool.map中的“ chunksize”参数。
对于以下代码,无论我对代码块大小参数使用'2'还是不使用任何代码,我都得到相同的结果。
import multiprocessing
from multiprocessing import Pool
lst_of_lst = [[1,2],[3,4],[5,6],[7,8]]
def count(lst):
return len(lst)
if __name__ == '__main__':
P = Pool(2)
for results in P.map(count,lst_of_lst,2):
print (results)
P.close()
P.join()
结果始终为:"2 2 2 2"
我希望将块大小为'2'的[[1,2],[3,4]]
发送给一个工人,将[[5,6],[7,8]]
发送给第二个工人,给我“ 2 2”作为答案。
我想念什么? chunksize有什么作用? 谢谢!
答案 0 :(得分:0)
您的代码仅给您更大列表中每个列表的长度。传递给who_am_I的参数不是可能被分割的块,而是列表的各个元素。您可以使用current_process来查看谁当前正在工作。
import multiprocessing
def who_am_I(x):
print(multiprocessing.current_process())
if __name__=='__main__':
list_of_lists = [[1,2],[3,4],[5,6],[7,8]]
with multiprocessing.Pool(8) as pool:
pool.map(who_am_I, list_of_lists, chunksize=2)
输出
<ForkProcess(ForkPoolWorker-17, started daemon)>
<ForkProcess(ForkPoolWorker-18, started daemon)>
<ForkProcess(ForkPoolWorker-17, started daemon)>
<ForkProcess(ForkPoolWorker-18, started daemon)>
如您所见,给定块大小,仅使用了两个工作器。