Async List Comprehensions In Python
Solution 1:
Yes, it is indeed possible to fire off multiple requests and asynchronously wait for them. Because Python is traditionally a synchronous language, you have to be very careful about what libraries you use with asynchronous Python. Any library that blocks the main thread (such as requests) will break your entire asynchronicity. aiohttp is a common choice for asynchronously making web API calls in Python. What you want is to create a bunch of future objects inside a Python list and await it. A future is an object that represents a value that will eventually resolve to something.
EDIT: Since the function that actually makes the API call is synchronous and blocking and you don't have control over it, you will have to run that function in a separate thread.
import asyncio
asyncdefmain():
    loop = asyncio.get_event_loop()
    futures = [asyncio.ensure_future(loop.run_in_executor(None, get_data, data)) for data in data_name_list]
    await asyncio.gather(*futures) # wait for all the future objects to resolve# Do something with futures# ...
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
Please note that this is Python 3.6 code and might vary significantly from 3.7+ async code
Post a Comment for "Async List Comprehensions In Python"