Использование многопроцессорного пула Python в терминале и в модулях кода для Django или Flask
При использовании multiprocessing.Pool в python со следующим кодом, происходит несколько странное поведение.
from multiprocessing import Pool
p = Pool(3)
def f(x): return x
threads = [p.apply_async(f, [i]) for i in range(20)]
for t in threads:
try: print(t.get(timeout=1))
except Exception: pass
Я получаю следующую ошибку три раза (по одному для каждого потока в пуле), и она печатает «3» через "19" :
AttributeError: 'module' object has no attribute 'f'
Первые три вызова apply_async никогда не возвращаются.
Между тем, если я попытаюсь:
from multiprocessing import Pool
p = Pool(3)
def f(x): print(x)
p.map(f, range(20))
Я получаю AttributeError 3 раза, оболочка печатает "6" через "19", а затем зависает и не может быть убит с помощью [Ctrl] + [C]
В многопроцессорных документах сказано следующее:
Функциональность в этом пакете требует, чтобыглавный модуль импортируется детьми.
Что это значит?
Чтобы уточнить, яЯ запускаю код в терминале для тестирования функциональности, но в конечном итоге я хочу иметь возможность поместить это в модули веб-сервера. Как правильно использовать multiprocessing.Pool в терминале python и в модулях кода?