pool.map中“ chunksize”的作用是什么?

时间:2019-07-26 13:42:12

标签: python multiprocessing

我无法理解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有什么作用? 谢谢!

1 个答案:

答案 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)>

如您所见,给定块大小,仅使用了两个工作器。