I am trying to use use grequests to make a single HTTP call asynchronously.
All goes find until I try to call a function (handle_cars
) to handle the response.
The problem is that the function is an async function and it I don't know how to await it while passing.
Is this even possible?
I need the function to be async because there is another async function I need to call from it. Another solution would be to be able to call and await the other async function (send_cars
) from inside the sync function.
async def handle_cars(res):
print("GOT IT")
await send_cars()
async def get_cars():
req = grequests.get(URL, hooks=dict(response=handle_cars))
job = grequests.send(req, grequests.Pool(1))
How do I set the response argument to await the function? Or how do I await send_cars
if I make handle_cars
synchronous?
Thanks
According to the OP's comments, he wishes to create a request in the background, and call a callback when it finishes.
The way to do so can be implemented using
asyncio.create_task()
and usingtask.add_done_callback()
.A simpler way however, will work by creating a new coroutine and running it in the background.
Demonstrated using
aiohttp
, it will work in the following way: