Я немного новичок в asyncio в Python. Я пытался запустить этот простой код, но не знаю, почему получаю такой неожиданный результат.
Что я сделал, так это то, что в функции outer
я создал асинхронные задачи и сохранил их в массиве tasks
. Прежде чем ждать выполнения этих задач, я написал оператор печати print("outer")
, который должен выполняться на каждой итерации. И внутри задачи я написал еще один оператор печати print("inner")
в функции inner
. Но каким-то образом я получаю неожиданный результат.
Вот код -
import asyncio
def main():
loop = asyncio.get_event_loop()
loop.run_until_complete(outer(loop))
loop.close()
async def outer(loop):
tasks = []
for i in range(0, 5):
tasks.append(loop.create_task(inner()))
for task in tasks:
print("outer")
await task
async def inner():
print("inner")
await asyncio.sleep(0.5)
if __name__ == '__main__':
main()
Вот результат -
outer
inner
inner
inner
inner
inner
outer
outer
outer
outer
Мой ожидаемый результат был -
outer
inner
outer
inner
outer
inner
outer
inner
outer
inner
Почему все inner
печатают до outer
. Каков правильный поток выполнения asyncio. Заранее спасибо.
await
, после чего она приостанавливается. Ваш пример аналогичен пример сопрограммы в документации, дающей аналогичные результаты. - person wwii   schedule 29.03.2020While a Task is running in the event loop, no other Tasks can run in the same thread. When a Task executes an await expression, the running Task gets suspended, and the event loop executes the next Task.
- person wwii   schedule 29.03.2020for
итерацию цикла. Если это правда, то нужно было напечататьouter
. - person shikhar srivastava   schedule 30.03.2020