You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quart异步路由中如何获取同步代码执行后的请求对象?

问题:Quart异步路由中使用run_sync无法获取同步函数返回值?

你遇到的问题很典型——run_sync的作用是把同步函数包装成异步可等待对象,而不是直接执行同步函数并返回结果。你现在的代码只是拿到了包装后的函数对象,自然打印的是函数的内存地址。

修正方案:添加await关键字

只需要对run_sync的调用结果使用await,就能获取到sync_processor返回的request对象了:

import requests
from quart import Quart
from quart.utils import run_sync

app = Quart(__name__)

def sync_processor():
    request = requests.get('https://api.github.com/events')
    return request

@app.route('/')
async def test():
    # 关键:添加await来等待异步包装后的同步函数执行完成
    result = await run_sync(sync_processor)
    print(result.json())  # 可以直接打印返回的JSON数据验证
    return "test"

if __name__ == '__main__':
    app.run()

为什么这样有效?

  • run_sync(func)会把同步函数func包装成一个异步函数,这个函数会在Quart的线程池中执行,避免阻塞事件循环。
  • 因为它是异步可等待对象,所以必须用await来等待它执行完毕,才能拿到func的返回值。如果不加await,你得到的只是这个包装后的函数本身,而不是执行结果。

额外提示:带参数的同步函数

如果你的同步函数需要传入参数,直接在run_sync后面追加即可:

def sync_processor(url):
    request = requests.get(url)
    return request

# 在路由中调用
result = await run_sync(sync_processor, 'https://api.github.com/events')

内容的提问来源于stack exchange,提问作者acG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 08:57:29