pyt*_*ife 10 python flask flask-restful python-asyncio
Flask 2.0 中介绍了 async/await 的用法。(https://flask.palletsprojects.com/en/2.0.x/async-await/)
我正在使用 Flask-RestX,那么是否可以在 RestX 请求处理程序中使用async/ ?await
就像是:
@api.route('/try-async')
class MyResource(Resource):
@api.expect(some_schema)
async def get(self):
result = await async_function()
return result
Run Code Online (Sandbox Code Playgroud)
不起作用,当我尝试到达此端点时,出现错误:
TypeError: Object of type coroutine is not JSON serializable
有这方面的信息吗?
封装版本:
flask==2.0.1
flask-restx==0.4.0
Run Code Online (Sandbox Code Playgroud)
我也flask[async]按照文档的建议安装了。
小智 2
我已经通过使用内部重定向解决了这个问题
@api.route('/try-async')
class MyResource(Resource):
@api.expect(some_schema)
def get(self):
return redirect(url_for('.hidden_async'), code=307)
@api.route('/hidden-async', methods=['GET'])
async def hidden_async():
result = await async_function()
return result
Run Code Online (Sandbox Code Playgroud)
重定向code=307将确保重定向(链接)后任何方法和主体都不会发生变化。因此,将数据传递给异步函数也是可能的。
@api.route('/try-async')
class MyResource(Resource):
@api.expect(some_schema)
def post(self):
return redirect(url_for('.hidden_async'), code=307)
@api.route('/hidden-async', methods=['POST'])
async def hidden_async():
data = request.get_json()
tasks = [async_function(d) for d in data]
result = await asyncio.gather(tasks)
return result
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1387 次 |
| 最近记录: |