Я пытаюсь понять Python Asyncio Lib, но это боль, и каждый раз, когда я думаю, что я знаю, как код будет себя вести, что-то меня удивляет.
У меня есть следующий код:
async def a():
while True:
task = asyncio.current_task() # asyncio.Task.current_task()
print(task.name)
await asyncio.sleep(0.5)
async def main():
tasks = []
for i in range(10):
c = a()
task = asyncio.create_task(c)
task.name = "task nr {}".format(i)
tasks.append(task)
for task in tasks:
await task
asyncio.run(main())
Результатом будет следующий подозрительный вывод:
task nr 0
task nr 1
task nr 2
task nr 3
task nr 4
task nr 5
task nr 6
task nr 7
task nr 8
task nr 9
и так далее.С другой стороны, у меня есть код
async def a():
while True:
task = asyncio.current_task() # asyncio.Task.current_task()
print(task.name)
await asyncio.sleep(0.5)
async def main():
for i in range(10):
c = a()
task = asyncio.create_task(c)
task.name = "task nr {}".format(i)
await task
asyncio.run(main())
. На этот раз он выводит просто "task nr 0".
В первом случае создается 10 задач, а затем запускаются все из них.Второй объединяет эти два цикла - почему это влияет на поведение программы?