Вывод:
@python_quizРазберем этот квиз
Заголовок: Порядок вывода при использовании asyncio.call_soon и await asyncio.sleep(0)
Код задачи

Краткое объяснение результата
- asyncio.get_running_loop().call_soon ставит колбэк в очередь "ready" — он будет выполнен при следующей возможности цикла событий, как только управление вернётся к циклу.
- await asyncio.sleep(0) приостанавливает текущую сопрограмму и отдаёт управление циклу событий, позволяя выполнить готовые колбэки.
- Следовательно, сначала выполняется колбэк, который печатает "A", а затем возобновляется сопрограмма и печатает "B".
Подробный разбор вариантов (почему что происходит)
- "Сначала выведется только 'A'": неверно — после вывода 'A' сопрограмма продолжит выполнение и печатает 'B'.
- "Сначала выведется только 'B'": неверно — перед возобновлением сопрограммы цикл выполнит готовые колбэки, поэтому 'A' успеет напечататься до 'B'.
- "Сначала 'A', затем 'B'": соответствует поведению кода — call_soon ставит колбэк в очередь, await asyncio.sleep(0) отдаёт контроль циклу, колбэк выполняется (печать 'A'), затем сопрограмма возобновляется и печатает 'B'.
- "Сначала 'B', затем 'A'": возможно в другой версии кода (см. ниже), но не для данного примера с await asyncio.sleep(0).
Демонстрации и вариации
1) Оригинальное поведение (A, затем B)

2) Если убрать await и сразу напечатать 'B', поведение поменяется: сопрограмма не отдаёт управления циклу до выполнения print('B'), поэтому сначала увидим 'B', затем 'A'.

3) Аналогично, если вы используете await asyncio.sleep(0) в другом месте или ставите задачу через create_task, порядок зависит от того, когда именно текущая сопрограмма уступит управление циклу и какие колбэки/задачи готовы к выполнению.
Короткие выводы и рекомендации
- call_soon ставит колбэк в очередь ready — он выполнится, когда цикл снова получит управление.
- await asyncio.sleep(0) — удобный приём, чтобы "уступить" управление и дать циклу выполнить готовые колбэки/задачи.
- Понимание, когда код отдаёт управление циклу (через await), критично для прогнозирования порядка вывода в asyncio-программах.