Многопроцессорная обработка Python: почему большие куски медленнее?

Я профилировал некоторый код, используя многопроцессорный модуль Python (функция 'job' просто возводит число в квадрат).

data = range(100000000)
n=4
time1 = time.time()
processes = multiprocessing.Pool(processes=n)
results_list = processes.map(func=job, iterable=data, chunksize=10000)
processes.close()
time2 = time.time()
print(time2-time1)
print(results_list[0:10])

Одна вещь, которую я нахожу странной, заключается в том, что оптимальный размер фрагмента составляет около 10 тыс. Элементов - на моем компьютере это заняло 16 секунд. Если я увеличу размер фрагмента до 100К или 200К, то он замедлится до 20 секунд.

Может ли это быть связано с тем, что для длинных списков требуется больше времени для травления? Размер фрагмента из 100 элементов занимает 62 секунды, что, как я полагаю, связано с дополнительным временем, необходимым для передачи фрагментов назад и вперед между различными процессами.

Ответы на вопрос(1)

Ваш ответ на вопрос