#python #multiprocessing
#python #многопроцессорная обработка
Вопрос:
У меня сложная программа на Python. Я пытаюсь использовать пул многопроцессорных процессов для его распараллеливания. Я получаю сообщение об ошибке
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
.
Обратная трассировка показывает состояния return send(obj)
Моя гипотеза заключается в том, что это «obj», который вызывает проблему, и что мне нужно сделать его доступным для настройки.
Как я могу определить, какой объект является причиной проблемы? Программа сложная, и простое угадывание может занять много времени.
Ответ №1:
Почему бы просто не добавить некоторые записи непосредственно перед отправкой возврата (obj)? Как минимум, это может помочь:
print repr(obj)
return send(obj)
Или печатать только тогда, когда это приводит к ошибке:
try:
return send(obj)
except:
print '***', repr(obj)
raise
Ответ №2:
Ошибка, которую вы видите, может быть вызвана передачей неправильного типа функции в многопроцессорную обработку.Методы пула. Переданная функция должна быть импортирована напрямую из ее родительского модуля. Например, это не может быть метод класса.