New submission from Yanghao Hua <yanghao...@gmail.com>:
This code runs perfectly fine with expected behavior: two tasks created, 
executed in an interleaved manner:

from time import time
from asyncio import run, create_task, sleep

async def task(name, n): 
    for i in range(n):
        print(f"task-{name}: ", i, time())
        await sleep(1)

async def top():
    t0 = create_task(task("T0", 10))
    t1 = create_task(task("T1", 10))
    print("starting tasks ...")
    await t0
    await t1

run(top())

Output:
starting tasks ...
task-T0:  0 1617656271.6513114
task-T1:  0 1617656271.6513336
task-T0:  1 1617656272.6526577
task-T1:  1 1617656272.652813
task-T0:  2 1617656273.654187
task-T1:  2 1617656273.6543217
task-T0:  3 1617656274.655706
task-T1:  3 1617656274.6558387
task-T0:  4 1617656275.65722
task-T1:  4 1617656275.657355
task-T0:  5 1617656276.6587365
task-T1:  5 1617656276.6588728
task-T0:  6 1617656277.660276
task-T1:  6 1617656277.6604114
task-T0:  7 1617656278.6617858
task-T1:  7 1617656278.66192
task-T0:  8 1617656279.6633058
task-T1:  8 1617656279.6634388
task-T0:  9 1617656280.6648436
task-T1:  9 1617656280.6649704

However, with slightly modified `async def top()`, things become executing 
sequentially:

async def top():
    print("starting tasks ...")
    await create_task(task("T0", 10))
    await create_task(task("T1", 10))

Output:
starting tasks ...
task-T0:  0 1617656306.1343822
task-T0:  1 1617656307.1357212
task-T0:  2 1617656308.1369958
task-T0:  3 1617656309.1384225
task-T0:  4 1617656310.1398354
task-T0:  5 1617656311.1412706
task-T0:  6 1617656312.1427014
task-T0:  7 1617656313.1441336
task-T0:  8 1617656314.1455553
task-T0:  9 1617656315.1468768
task-T1:  0 1617656316.1482618
task-T1:  1 1617656317.1496553
task-T1:  2 1617656318.151089
task-T1:  3 1617656319.1525192
task-T1:  4 1617656320.153974
task-T1:  5 1617656321.1554224
task-T1:  6 1617656322.1568594
task-T1:  7 1617656323.1582792
task-T1:  8 1617656324.1597185
task-T1:  9 1617656325.1611636

This breaks the behavior expectation, where created tasks should have been 
executing in parallel. It seems if a created task is immediately awaited, it is 
not returning to the top() immediately, and instead, it executes the task and 
waited until it finishes.

Is this a bug, or did I miss something?

Thank you.

----------
components: asyncio
messages: 390260
nosy: asvetlov, yanghao.py, yselivanov
priority: normal
severity: normal
status: open
title: asyncio create_task() odd behavior
type: behavior
versions: Python 3.9

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue43736>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to