Ответ 1
Эта проблема представляет собой конструктивную особенность многопроцессорной обработки. См. https://bugs.python.org/issue25053. По какой-то причине пул не всегда работает с объектами, не определенными в импортированном модуле. Поэтому вам нужно записать свою функцию в другой файл и импортировать модуль.
Файл: defs.py
def f(x):
return x*x
Файл: run.py
from multiprocessing import Pool
import defs
if __name__ == '__main__':
with Pool(5) as p:
print(p.map(defs.f, [1, 2, 3]))
Если вы используете печать или другую встроенную функцию, этот пример должен работать. Если это не ошибка (по ссылке), данный пример выбирается плохо.