在Python中使用Twisted实现多进程服务器

8 投票
1 回答
3045 浏览
提问于 2025-04-16 18:03

我需要用Python写一个主要依赖CPU的服务器,目的是为了把工作负载分配到多个核心上。我想用Twisted来做服务器(通过TCP接收请求)。

有没有更好的选择,比如用Ampoule?我还看到一篇文章提到用Twisted的pb进行通信,配合Popen使用,或者也许可以把它和multiprocessing结合起来?

1 个回答

10

Ampoule 是一个很好的工具,可以用来搭建一个多进程的服务器,特别是当服务器需要处理大量计算时。它使用的是比较简单的 AMP 协议,而不是复杂的 PB 协议,因为我们通常只需要把工作数据传到另一个进程,然后再取回结果,复杂的功能并不必要。Ampoule 还负责创建进程、管理进程的生命周期、重启等操作。

如果你在使用 Twisted 的时候,通常最好避免使用 Popenmultiprocessing 这个标准库模块。虽然它们可以一起工作,但它们的接口是阻塞式的,这样反而会影响使用 Twisted 的初衷。Twisted 自带的子进程 API,reactor.spawnProcess 功能强大,而且不会造成阻塞。Ampoule 就是基于这个原理的。

不过,Ampoule 的使用范围没有 multiprocessing 那么广泛。在你的开发或部署环境中,可能会遇到一些小问题。但我认为这些问题并不是无法解决的。我曾经开发过一个服务,使用 Ampoule 来分配解析大量 HTML 的工作到多个 CPU 上,最后效果很好。如果你遇到任何问题,我鼓励你去 反馈给开发者!我希望将来能说 Ampoule 和其他工具一样稳定,而不是需要附上使用的免责声明。:)

撰写回答