0

我们的服务器有很多 CPU,如果请求处理程序进行一些并行处理,一些 Web 请求可能会更快。

示例:需要对N(大约1-20)张图片进行一些工作,以处理一个Web请求。

在请求到来之前缓存或做这些事情是不可能的。

使用硬件的多个 CPU 可以做什么:

  • 主题:我不喜欢它们
  • 多处理:每个请求都需要启动 N 个进程。启动新进程和导入库将丢失许多 CPU 周期。
  • 特殊(手工)服务,有 N 个进程准备好处理
  • cellery(rabbitMQ):我不知道通信开销有多大......
  • 其他解决方案?

平台:Django (Python)

4

2 回答 2

3

关于您的第二种和第三种选择:您不需要为每个请求启动一个新流程。这就是进程池的用途。当您的应用程序启动时会创建新进程。当您向池提交请求时,它会自动排队,直到有工作人员可用。缺点是请求被阻塞 - 如果此时没有可用的工作人员,您的用户将坐下来等待。

于 2013-01-17T10:09:18.063 回答
1

您可以使用标准库模块asyncore

该模块为编写异步套接字服务客户端和服务器提供了基本的基础设施。

有一个关于如何创建基本 HTML 客户端的示例。


然后是Twisted,它可以做很多很多事情,这就是为什么它有点令人生畏。这是一个使用其 HTTP 客户端的示例


Twisted “说 HTTP ”,asyncore 不说,必须这样做。


其他库:

于 2013-01-17T10:08:56.977 回答