如何在python falcon中使用async await?

时间:2016-11-24 16:47:57

标签: python async-await falconframework

我正在寻找使用python 3的异步等待功能的例子。我正在使用falcon框架来构建rest api。无法弄清楚如何使用异步等待它。

请通过提供一些示例帮助我,可能还有其他框架。

谢谢!

2 个答案:

答案 0 :(得分:2)

更新:从 Falcon 3.0 开始,框架通过 ASGI 协议支持 async / await

为了编写异步 Falcon 代码,您需要使用 the ASGI flavour of App,例如:

import http

import falcon
import falcon.asgi


class MessageResource:
    def __init__(self):
        self._message = 'Hello, World!'

    async def on_get(self, req, resp):
        resp.media = {'message': self._message}

    async def on_put(self, req, resp):
        media = await req.get_media()
        message = media.get('message')
        if not message:
            raise falcon.HTTPBadRequest

        self._message = message
        resp.status = http.HTTPStatus.NO_CONTENT


app = falcon.asgi.App()
app.add_route('/message', MessageResource())

假设以上代码段保存为test.py,ASGI应用程序可以作为

uvicorn test:app

使用 HTTPie 设置和检索消息:

$ http PUT http://localhost:8000/message message=StackOverflow
HTTP/1.1 204 No Content
server: uvicorn
$ http http://localhost:8000/message 
HTTP/1.1 200 OK
content-length: 28
content-type: application/json
server: uvicorn

{
    "message": "StackOverflow"
}

注意,当使用 Falcon 的 ASGI 风格时,所有响应者、钩子、中间件方法、错误处理程序等都必须是可等待的协程函数,因为框架不会在执行者。

另见Falcon's ASGI tutorial

答案 1 :(得分:0)

Falson's FAQs声明他们目前不支持m