【问题标题】:Implementing a multi-process server in Python, with Twisted使用 Twisted 在 Python 中实现多进程服务器
【发布时间】:2011-05-20 18:28:22
【问题描述】:

我必须用 Python 编写一个 CPU 密集型服务器,以便为多个内核分配工作负载。我想使用 Twisted 作为服务器(通过 TCP 传入的请求)。

有没有更好的选择——也许是使用安瓿?我还看到一篇文章使用 Twisted 的 pb 进行通信,与 Popen 结合使用 - 或者将其与 multiprocessing 结合使用?

【问题讨论】:

    标签: python parallel-processing twisted


    【解决方案1】:

    Ampoule 是多进程 CPU 绑定服务器的良好构建块。它使用更简单的 AMP 协议,而不是 PB(其复杂性通常不需要将作业数据移动到另一个进程然后检索结果)。它处理进程创建、生命周期管理、重启等。

    如果您使用 Twisted,您通常希望避免使用 Popenmultiprocessing 标准库模块。他们可以合作,但他们都提供了面向阻塞的 API,这在某种程度上违背了使用 Twisted 的初衷。 Twisted 的原生子进程 API,reactor.spawnProcess 具有同样的能力并且避免了阻塞。安瓿就是以此为基础的。

    不过,安瓿的使用范围不如multiprocessing。您可能会发现它在您的开发或部署环境中有一些怪癖。不过,我不认为这些将是你无法克服的障碍。我开发了一项服务,它使用 Ampoule 将解析大量 HTML 的工作分配到多个 CPU 上,并且最终运行良好。如果您确实遇到任何问题,我鼓励您report them upstream!最终,我希望能够说安瓿与任何东西(或更多)一样强大,而不是附上关于其使用的免责声明。 :)

    【讨论】:

    • 感谢您的回答,让-保罗!但是难道twisted也有AMP吗?为什么不使用仅扭曲的 amp+spawnProcess 并添加另一个库?既然这么好,那你为什么不加安瓿呢?
    • 正如Jean-Paul 所说,安瓿不如spawnProcess 本身强大,但它具有更多功能。它变得更加健壮的唯一方法是如果有很多人使用它,报告错误并帮助改进它,所以请试一试,以便我们尽快将它添加到 Twisted! :)
    猜你喜欢
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多