You need to enable JavaScript to run this app. Flask 2.0+搭配Flask-RestX能否使用async/await语法?
优惠活动
大模型
产品
解决方案
定价
更多

Flask 2.0+搭配Flask-RestX能否使用async/await语法?

问题原因

flask-restx==0.4.0版本未适配Flask 2.0+的原生async支持,框架的Resource请求调度逻辑无法识别async类型的请求处理方法,不会自动执行方法返回的协程对象,直接将协程实例交给JSON序列化模块处理,因此触发TypeError: Object of type coroutine is not JSON serializable报错。

解决方案
  • 方案1:升级flask-restx到适配async的版本
    1.1.0及以上版本的flask-restx已经完成了Flask async特性的适配,原有async视图代码不需要做任何修改即可正常运行,升级命令如下:
    pip install --upgrade flask-restx>=1.1.0
  • 方案2:固定使用0.4.0版本时手动包装异步逻辑
    如果因项目依赖限制无法升级flask-restx,可以借助Flask内置的ensure_sync方法手动执行异步逻辑,将协程的返回值作为接口返回,参考实现如下:
    from flask import current_app
    
    @api.route('/try-async')
    class MyResource(Resource):
        @api.expect(some_schema)
        def get(self):
            # 所有异步逻辑封装到内部async函数中
            async def _handle_request():
                result = await async_function()
                # 可在此处添加其他异步操作
                return result
            # 用Flask提供的同步包装器执行异步逻辑
            return current_app.ensure_sync(_handle_request)()
    
注意事项
  • 生产环境运行async视图时,建议使用Uvicorn、Hypercorn等ASGI服务器,使用传统WSGI服务器运行async视图会产生额外的性能开销。
  • 若使用方案2,不要在async逻辑中直接调用Flask的线程局部变量(如request、g),如果需要使用这些变量,建议提前在同步层取值后传入async函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 01:36:03