Asyncio зависает при запуске многопроцессорного процесса в Windows, но отлично работает в LinuxPython

Программы на Python
Ответить
Anonymous
 Asyncio зависает при запуске многопроцессорного процесса в Windows, но отлично работает в Linux

Сообщение Anonymous »

Я экспериментирую с сочетанием asyncio и многопроцессорности в Python 3.12.
В Linux следующий код работает должным образом — цикл обработки событий остается отзывчивым, а дочерний процесс печатает нормально.
В Windows цикл событий зависает после первого await asyncio.sleep().
Минимальный код:

Код: Выделить всё

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())

Что происходит:
  • Linux: печатает галочку 0, галочку 1, галочку 2, рабочие сообщения → работает нормально
  • Windows: печатает только галочку 0, затем зависает на неопределенный срок
Мои вопросы:
  • Почему цикл событий зависает только в Windows?
  • Ожидается ли это, потому что Windows использует метод запуска «spawn»?
  • Существует ли рекомендуемый обходной путь (например, использование asyncio.to_thread, ProcessPoolExecutor или установка другого метода запуска)?
  • Следует ли вообще избегать использования asyncio + многопроцессорности в Windows?


Подробнее здесь: https://stackoverflow.com/questions/798 ... works-fine
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»