gpt4 book ai didi

Python falcon 和异步操作

转载 作者:太空狗 更新时间:2023-10-30 00:31:57 25 4
gpt4 key购买 nike

我正在使用 python3 + falcon 组合编写 API。

方法中有很多地方我可以向客户端发送回复,但是由于一些执行 DB、I/O 操作等的繁重代码,它必须等到繁重部分结束。

例如:

class APIHandler:                                                                      
def on_get(self, req, resp):
response = "Hello"
#Some heavy code
resp.body(response)

我可以在代码的第一行发送“Hello”。我想要的是在后台运行繁重的代码并发送响应,而不管繁重的部分何时完成。

Falcon 没有任何内置的异步功能,但他们提到它可以与 gevent 之类的东西一起使用。我还没有找到任何关于如何将这两者结合起来的文档。

最佳答案

客户端库对异步操作的支持各不相同,因此决定通常取决于您的特定后端客户端最支持哪种异步方法,以及您想使用哪个 WSGI 服务器。另请参阅下面的一些更常见的选项...

对于不支持异步交互模型的库,无论是原生支持还是通过某种子类化机制,任务都可以委托(delegate)给线程池。对于特别长时间运行的任务(即大约几秒或几分钟),Celery 是一个不错的选择。

对 WSGI(和 Falcon)应用的一些更常见的异步选项的简要调查:

  • Twisted. 支持显式异步风格,可能是最成熟的选择。为了与像 Falcon 这样的 WSGI 框架集成,有 twisted.web.wsgicrochet .
  • asyncio. 借鉴了 Twisted 的许多想法,但利用 Python 3 语言功能提供更清晰的界面。从长远来看,这可能是最干净的选择,但需要对 WSGI 接口(interface)进行改进(另请参阅 pulsar's extension to PEP-3333 作为一种可能的方法)。在撰写本文时,asyncio 生态系统还比较年轻; the community仍在尝试围绕界面、模式和工具的各种方法。
  • eventlet. 支持寻求使异步代码看起来同步的隐式样式。 eventlet 做到这一点的一种方法是通过标准库中的猴子修补 I/O 模块。有些人不喜欢这种方法,因为它掩盖了异步机制,使边缘情况更难调试。
  • gevent。 类似于 eventlet,但更现代一些。 uWSGI 和 Gunicorn 都支持对标准库进行猴子修补的 gevent worker 类型。

最后,有可能扩展 Falcon 以原生支持 twisted.web 或 asyncio(ala aiohttp),但我认为还没有人尝试过。

关于Python falcon 和异步操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27297072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com