LINUX.ORG.RU

История изменений

Исправление 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 нетути). И напиши, что конкретно тебя не устраивает в имеющихся решениях.