【问题标题】:Twisted with queue for CPU-bound tasks与 CPU 绑定任务的队列扭曲
【发布时间】:2012-07-08 17:26:45
【问题描述】:

我有一个 HTTP 服务器,它执行一些 IO 工作,然后执行一些 CPU 绑定的工作 (PIL),然后回复数据(兆字节左右)。

(a) 我的第一个想法是这样的:一个基于 Twisted 的服务器和 IO 进程,以及几个用于 PIL 东西的进程,带有队列。

如果这种架构是合理的,那么可能有一个库可以做到这一点:Twisted 的多进程队列。但是,我在 Twisted 中并没有真正的经验,对其社区一无所知,所以我发现的唯一东西是 ampoule,我找不到任何文档和描述都无法说服我这是适合工作的工具。

(b) 另一个想法是只在多个线程中运行多个服务器,IO 和 CPU 的东西都在每个线程中运行。这似乎很愚蠢,因为 CPU 的东西会阻塞,但也许我并没有真正理解它。

所以,问题:

  1. 这些架构是否合理?
  2. 您将如何实现它(使用Twisted + ampoule 或什么?)
  3. 对于 (a),如何将大量数据从“worker”发送到服务器线程?或者我可以告诉工作人员以某种方式直接写入响应?
  4. 多少“工人”才算合理?

【问题讨论】:

    标签: python queue twisted multiprocessing cpu-usage


    【解决方案1】:
    1. 是的,这些架构可能是合理的
    2. 我可能也会使用安瓿,但我现在也不太了解它。 This link 是我记得看过的最接近好的介绍的东西。
    3. 听起来您的工作人员总是在同一台机器上,您应该能够使用共享内存。
    4. 这在很大程度上取决于您可用的内核数量以及工作的密集程度(包括 CPU 时间和其他资源,如内存和磁盘)。可能很难给出比“每个核心大约 1-5 个进程进行基准测试,看看什么是最快的”更好的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-30
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      相关资源
      最近更新 更多