一个Web请求中的并行性

时间:2013-01-17 09:21:36

标签: python django parallel-processing

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

示例:需要对N(约1-20张)图片进行一些工作,以及严重的网络请求。

在请求进入之前缓存或执行这些操作是不可能的。

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

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

平台:Django(Python)

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

您可以使用standard library module asyncore

  

此模块提供了编写异步套接字服务客户端和服务器的基本基础结构。

how to create a basic HTML client有一个例子。


然后是Twisted,它可以做很多事情,这就是为什么它有点令人生畏。这是一个example using its HTTP client


Twisted“说HTTP ”,asyncore没有,将不得不。


其他图书馆: