Я столкнулся с интересной функцией / ошибкой для python многопроцессорной обработки и подумал, может ли кто-нибудь предложить более глубокое понимание. Я создаю массив numpy через np.arange
внутри функции и добавляю к нему константу. Если длина массива меньше, чем около 100 тыс. Элементов, это хорошо работает. Однако, если массив длиннее, многопроцессорная обработка завершается без предупреждения об ошибке и застревает. Пример кода:
import numpy as np
from multiprocessing import Pool
from contextlib import closing
#::: works well
# def fct(arg):
# a,b = arg
# x = a + np.arange(-0.25*b, 0.75*b, 0.01) #small array, sum outside
# print(len(x), np.mean(x))
#::: works well
# def fct(arg):
# a,b = arg
# x = np.arange(a-0.25*b, a+0.75*b, 0.001) #large array, sum inside
# print(len(x), np.mean(x))
#::: crashes with pool
# def fct(arg):
# a,b = arg
# x = a + np.arange(-0.25*b, 0.75*b, 0.001) #large array, sum outside
# print(len(x), np.mean(x))
if __name__ == '__main__':
args = [(a,b) for a,b in zip(np.random.normal(2458000,100,size=10), np.random.normal(200,10,size=10))]
#::: loop
print('\n loop:')
for arg in args:
fct(arg)
# ::: pool
print('\n pool:')
with closing(Pool(processes=(2))) as pool:
pool.map(fct, args)