我正在将一些同步 Python 代码重新调整为异步代码。它工作得很好,但是当我更改这行代码时
l = asyncio.create_task(Functions.getData(session, id))
到此
l, i = asyncio.create_task(Functions.getData(session, id))
我收到一个运行时错误,上面写着这个。
"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"
我的 getData 函数返回一个元组 (var1, var2),但由于某种原因 asyncio 不喜欢它。
问题是,当您使用
asyncio.create_task
时,它会返回表示任务的单个 future 对象。如果您想从 Functions.getData
的结果中解包多个值,您应该在等待任务后执行此操作。
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())
这样,您就可以等待任务,然后解压结果