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

2024-10-01 04:47:26 发布

您现在位置:Python中文网/ 问答频道 /正文

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

根据我在sanic文档中看到的,简单地将该方法定义为async就可以实现我想要做的事情?我试着在前面加上等待lib.getAlarmState()但我不确定我用得对。在

@app.route('/processjson')
async def processjson(request):

    vals = lib.getAlarmState()

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

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


Tags: 方法web报警客户端示例asyncsanic状态
1条回答
网友
1楼 · 发布于 2024-10-01 04:47:26

这是对的。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})

相关问题 更多 >