如何在 python falcon 中使用异步等待?
How to use async await in python falcon?
我正在寻找使用 python 的异步等待功能的示例 3. 我正在使用 falcon 框架来构建 rest api。无法弄清楚如何使用 async await 。
请帮助我,提供一些示例,也许还有其他框架。
谢谢!
Falson's FAQs表示暂时不支持asyncio
更新:从 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=Whosebug
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": "Whosebug"
}
注意当使用 Falcon 的 ASGI 风格时,所有响应器、挂钩、中间件方法、错误处理程序等都必须是可等待的协程函数,因为框架不执行任何隐式在执行程序中包装或调度。
我正在寻找使用 python 的异步等待功能的示例 3. 我正在使用 falcon 框架来构建 rest api。无法弄清楚如何使用 async await 。
请帮助我,提供一些示例,也许还有其他框架。
谢谢!
Falson's FAQs表示暂时不支持asyncio
更新:从 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=Whosebug
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": "Whosebug"
}
注意当使用 Falcon 的 ASGI 风格时,所有响应器、挂钩、中间件方法、错误处理程序等都必须是可等待的协程函数,因为框架不执行任何隐式在执行程序中包装或调度。