История изменений
Исправление lu4nik, (текущая версия) :
NUM_PROC=15
def processing_func(some_object, p1, p2):
# Do stuff
with multiprocessing.Pool(processes=NUM_PROC) as pool:
result = pool.starmap(processing_func, [(o, param1, param2) for o in some_objects])
Всегда так делал®©™, это самый стандартный путь (за исключением объектов с открытыми файлами и т.п., но их нельзя в принципе просто так передавать между процессами; параллельных потоков без поднятия GIL в cpython нетути). И напиши, что конкретно тебя не устраивает в имеющихся решениях.
EDIT: написал выше до исправления топика. Твоя проблема в том, что функция процессинга внутри другой функции и фактически является локальной переменной. Эта переменная спавнится во время выполнения функции, а не раньше. Поэтому после форка функцию процесса найти не получается. Вынеси make_all
наружу на уровень модуля.
EDITT: форматирование
EDITTT: Ты еще забыл про то, что у процессов память отдельная. Поэтому тебе нужно вернуть измененные объекты, иначе они останутся только в памяти воркер-процессов, а не вызывающего.
Исправление lu4nik, :
NUM_PROC=15
def processing_func(some_object, p1, p2):
# Do stuff
with multiprocessing.Pool(processes=NUM_PROC) as pool:
result = pool.starmap(processing_func, [(o, param1, param2) for o in some_objects])
Всегда так делал®©™, это самый стандартный путь (за исключением объектов с открытыми файлами и т.п., но их нельзя в принципе просто так передавать между процессами; параллельных потоков без поднятия GIL в cpython нетути). И напиши, что конкретно тебя не устраивает в имеющихся решениях.
EDIT: написал выше до исправления топика. Твоя проблема в том, что функция процессинга внутри другой функции и фактически является локальной переменной. Эта переменная спавнится во время выполнения функции, а не раньше. Поэтому после форка функцию процесса найти не получается. Вынеси make_all
наружу на уровень модуля.
EDITT: форматирование
Исправление lu4nik, :
NUM_PROC=15
def processing_func(some_object, p1, p2):
# Do stuff
with multiprocessing.Pool(processes=NUM_PROC) as pool:
result = pool.starmap(processing_func, [(o, param1, param2) for o in some_objects])
Всегда так делал®©™, это самый стандартный путь (за исключением объектов с открытыми файлами и т.п., но их нельзя в принципе просто так передавать между процессами; параллельных потоков без поднятия GIL в cpython нетути). И напиши, что конкретно тебя не устраивает в имеющихся решениях.
EDIT: написал выше до исправления топика. Твоя проблема в том, что функция процессинга внутри другой функции и фактически является локальной переменной. Эта переменная спавнится во время выполнения функции, а не раньше. Поэтому после форка функцию процесса найти не получается. Вынеси
make_all
Исходная версия lu4nik, :
NUM_PROC=15
def processing_func(some_object, p1, p2):
# Do stuff
with multiprocessing.Pool(processes=NUM_PROC) as pool:
result = pool.starmap(processing_func, [(o, param1, param2) for o in some_objects])
Всегда так делал®©™, это самый стандартный путь (за исключением объектов с открытыми файлами и т.п., но их нельзя в принципе просто так передавать между процессами; параллельных потоков без поднятия GIL в cpython нетути). И напиши, что конкретно тебя не устраивает в имеющихся решениях.