GatherSequentialAwaitRule

Discourages awaiting coroutines in a loop as this will run them sequentially. Using asyncio.gather() will run them concurrently.

Message

Using await in a loop will run async function sequentially. Use asyncio.gather() to run async functions concurrently.

Has Autofix: No

VALID Code Examples

# 1:

async def async_foo():
    return await async_bar()

# 2:

path: foo/tests/test_foo.py

# await in a loop is fine if it's a test.
async def async_check_call():
    for _i in range(0, 2):
        await async_foo()

INVALID Code Examples

# 1:

async def async_check_call():
    for _i in range(0, 2):
        await async_foo()

# 2:

async def async_check_assignment():
    for _i in range(0, 2):
        x = await async_foo()

# 3:

async def async_check_list_comprehension():
    [await async_foo() for _i in range(0, 2)]