将异步创建任务设置为两个变量

问题描述 投票:0回答:1

我正在将一些同步 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 不喜欢它。

python asynchronous python-asyncio
1个回答
0
投票

问题是,当您使用

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())

这样,您就可以等待任务,然后解压结果

© www.soinside.com 2019 - 2024. All rights reserved.