@Phoenix2000h

Как в python использовать функции async внутри multiprocessing.Pool?

with multiprocessing.Pool() as pool:
        results = pool.map(async_main, urls_chunks)

Когда пытаюсь закинуть в pool.map корутину, то получаю ошибку:

multiprocessing.pool.MaybeEncodingError: Error sending result: '[<coroutine object async_main at 0x7f3bac2e6bd0>, <coroutine object async_main at 0x7f3baacb5f10>, <coroutine object async_main at 0x7f3baacb6020>, <coroutine object async_main at 0x7f3baacb6130>]'. Reason: 'TypeError("cannot pickle 'coroutine' object")'

Т.е. использовать async функции c методами multiprocessing нельзя.
Есть ли способы обойти это ограничение или необходимо ждать новых версий python, или использовать другие ЯП (в том числе через возможности ОС, например bash, с запуском python файла в цикле)?
  • Вопрос задан
  • 37 просмотров
Пригласить эксперта
Ответы на вопрос 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Спроектировать программу так, чтобы сопрограммы не покидали границы процессов. Ни в новых версиях Python, ни в других языках вы не сможете осуществить подобного действия.
Ответ написан
Vindicar
@Vindicar
RTFM!
Я очень надеюсь, что у тебя асинхронщина занимается получением данных, а multiprocessing - обработкой. В этом случае тебе не корутины по процессам надо раскидывать, а создавать внутри одной корутины синхронные задачи по обработке. А асинхронке оставить вопросы получение исходных данных/отправки результатов. Так куда практичнее. run_in_executor() в помощь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы