所以我尝试使用Sanic来处理一些异步web请求,因为我有一些特殊的请求需要几秒钟才能返回,但我希望同时从客户端处理其他请求。下面是一个示例方法,它在等待lib.getAlarmState()返回时似乎仍然阻塞来自客户端的其他调用。(lib.getAlartmState()是对使用pythons ctype的C库的调用,返回时间约为3秒,并返回Int类型。)
根据我在sanic的文档中看到的,简单地将方法定义为异步应该做我想要做的事情?我试着在lib.getAlarmState()前面添加一个await,但是我不确定我是否用对了。
@app.route('/processjson')
async def processjson(request):
vals = lib.getAlarmState()
return response.json({"alarm:" : vals})我期望当所显示的方法停止工作时,我应该能够从客户端调用其他方法并获得响应。
发布于 2019-06-07 02:51:04
这是正确的。Sanic将无法将阻塞调用转换为异步调用。也许,您可以尝试在单独的任务中运行它。
async def get_alarm_state_wrapper():
return lib.getAlarmState()
@app.route('/processjson')
async def processjson(request):
vals = await asyncio.gather(get_alarm_state_wrapper())
return response.json({"alarm:" : vals})https://stackoverflow.com/questions/56482348
复制相似问题