Advertisements
I’m repurposing some synchronous python code to be asynchronous. It is working really well, but when I change this line of code
l = asyncio.create_task(Functions.getData(session, id))
to this
l, i = asyncio.create_task(Functions.getData(session, id))
I get a RuntimeError that says this.
"Exception has occurred: RuntimeError
await wasn't used with future
File 'test.py', line 46, in get_tasks
l, i = asyncio.create_task(Functions.getData(session, id))
^^^^
File 'test.py', line 79, in get_data
a, b, c = get_tasks(session)
^^^^^^^^^^^^^^^^^^
File 'test.py', line 108, in <module>
asyncio.run(get_data())
RuntimeError: await wasn't used with future"
My getData function returns a tuple (var1, var2), but for some reason asyncio does not like it.
>Solution :
The issue is that when you use asyncio.create_task
, it returns a single future object representing the task. If you want to unpack multiple values from the result of Functions.getData
, you should do it after awaiting the task.
import asyncio
async def get_data(session, id):
# Simulating some asynchronous operation
await asyncio.sleep(1)
return "result1", "result2"
async def get_tasks(session, id):
task = asyncio.create_task(get_data(session, id))
result = await task # Wait for the task to complete
var1, var2 = result
return var1, var2
async def main():
session = None # Replace with your session
id = 123 # Replace with your id
var1, var2 = await get_tasks(session, id)
print(var1, var2)
asyncio.run(main())
This way, you await the task and then unpack the results