首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sanic的异步(非阻塞)方法问题

Sanic的异步(非阻塞)方法问题
EN

Stack Overflow用户
提问于 2019-06-07 01:22:21
回答 1查看 784关注 0票数 0

所以我尝试使用Sanic来处理一些异步web请求,因为我有一些特殊的请求需要几秒钟才能返回,但我希望同时从客户端处理其他请求。下面是一个示例方法,它在等待lib.getAlarmState()返回时似乎仍然阻塞来自客户端的其他调用。(lib.getAlartmState()是对使用pythons ctype的C库的调用,返回时间约为3秒,并返回Int类型。)

根据我在sanic的文档中看到的,简单地将方法定义为异步应该做我想要做的事情?我试着在lib.getAlarmState()前面添加一个await,但是我不确定我是否用对了。

代码语言:javascript
复制
@app.route('/processjson')
async def processjson(request):

    vals = lib.getAlarmState()

    return response.json({"alarm:" : vals})

我期望当所显示的方法停止工作时,我应该能够从客户端调用其他方法并获得响应。

EN

回答 1

Stack Overflow用户

发布于 2019-06-07 02:51:04

这是正确的。Sanic将无法将阻塞调用转换为异步调用。也许,您可以尝试在单独的任务中运行它。

代码语言:javascript
复制
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})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56482348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档