How to use asynchronous generator in Python 3.6?

Viewed 9642

I need to process several pages of data from server. I would like to make a generator for it like this. Unfortunately I get TypeError: 'async_generator' object is not iterable

async def get_data():
    i = 0
    while i < 3:
        i += 1
        data = await http_call()  # call to http-server here
        yield data

data = [i for i in get_data()]  # inside a loop

Next variant raises TypeError: object async_generator can't be used in 'await' expression

data = [i for i in await get_data()]  # inside a loop
1 Answers

Use async for in your comprehension. See PEP 530 -- Asynchronous Comprehensions

data = [i async for i in get_data()]

Depending on what version of Python you're using, this may only be available in async def functions.

Related