2012-07-08 119 views
2

我有一个HTTP服务器,它执行一些IO的东西,然后做一些CPU绑定的东西(PIL),然后用数据(大小为兆字节左右)回复。 (a)我的第一个想法是这样的:一个基于Twisted的服务器和IO进程,以及几个PIL进程,带有队列。扭曲CPU队列任务的队列

如果这个体系结构是合理的,那么可能有一个库确实做到了这一点:Twisted的多进程队列。然而,我对Twisted并不是很有经验,对其社区一无所知,因此我发现的唯一的事情就是ampoule,对此我找不到任何文档或描述,这些文档或描述都不会说服我,它是适合工作的正确工具。 (b)另一个想法是在多个线程中运行多个服务器,IO和CPU都在其中运行。这似乎很愚蠢,因为CPU的东西会阻止,但也许我不是很了解它。

所以,问题:

  1. 是这些架构是否合理?
  2. 你将如何实现它(使用Twisted + ampoule还是什么?)
  3. 对于(一),你会怎么发从“工人”数据的一大堆服务器线程?或者,也许我可以告诉工作人员直接以某种方式写入回复?
  4. 有多少“工人”是合理的?

回答

1
  1. 是,这些架构可能是合理的
  2. 我可能会使用安瓿过,但我不知道了很多关于它现在要么。 This link是我记得看到的最好的介绍。
  3. 由于听起来您的工作人员总是在同一台计算机上,因此您应该可以使用共享内存。
  4. 这很大程度上取决于您可用的内核数量和工作量(包括CPU时间和其他资源,如内存和磁盘)。 “比较每个核心的1-5个进程的基准数量,并看看最快的数据”,可能很难给出任何答案。