Я экспериментирую с сочетанием asyncio и многопроцессорности в Python 3.12.
В Linux следующий код работает должным образом — цикл обработки событий остается отзывчивым, а дочерний процесс печатает нормально.
В Windows цикл событий зависает после первого await asyncio.sleep().
Минимальный код:
Я экспериментирую с сочетанием asyncio и многопроцессорности в Python 3.12. В Linux следующий код работает должным образом — цикл обработки событий остается отзывчивым, а дочерний процесс печатает нормально. В Windows цикл событий зависает после первого await asyncio.sleep(). Минимальный код: [code] def worker(): print("Worker started") time.sleep(1) print("Worker done")
async def main(): p = Process(target=worker) p.start()
for i in range(3): print("tick", i) await asyncio.sleep(0.2)
p.join()
asyncio.run(main())
[/code] Что происходит: [list] [*][b]Linux:[/b] печатает галочку 0, галочку 1, галочку 2, рабочие сообщения → работает нормально
[*][b]Windows:[/b] печатает только галочку 0, затем зависает на неопределенный срок
[/list] Мои вопросы: [list] [*]Почему цикл событий зависает только в Windows?
[*]Ожидается ли это, потому что Windows использует метод запуска «spawn»?
[*]Существует ли рекомендуемый обходной путь (например, использование asyncio.to_thread, ProcessPoolExecutor или установка другого метода запуска)?
[*]Следует ли вообще избегать использования asyncio + многопроцессорности в Windows?