python - Twisted 队列用于 CPU 密集型任务

标签 python queue twisted multiprocessing cpu-usage

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

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

如果这个架构是合理的,那么可能有一个库可以做到这一点:Twisted 的多进程队列。但是,我在 Twisted 方面并没有真正的经验并且对它的社区一无所知,所以我唯一找到的是 ampoule,我没有找到任何文档和描述来说服我它是正确的工具一份工作。

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

那么,问题:

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

最佳答案

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

关于python - Twisted 队列用于 CPU 密集型任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11385131/

相关文章:

python - 测试 RPC 扭曲调用的工具?

python - 处理协议(protocol)、延迟和命令行输入

python - 使用 impyla 执行时如何在配置单元查询中传递参数?

c - 将结构插入队列时出现段错误

python - 多处理队列批处理最多 N 个元素

.net - 在我的代码使用 AWS SQS 失败时重试消息

python - 无法在 Mac 上安装 Twisted 17.1.0

python - 哪个动态创建的对象调用了该函数?

python - 创建真正巨大的 scipy 数组

python - 使用 Python SDK 加速生成 Dropbox 可共享链接的大量请求?