Использование многопроцессорного пула 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 и в модулях кода?

Ответы на вопрос(3)

Ваш ответ на вопрос