Apache下的多线程导致重复的线程

时间:2012-06-17 07:40:29

标签: python django multithreading apache2 threadpool

我在Apache2下运行一个python线程池来处理传入的特殊HTTP请求。

我的想法是每个请求源都有一个“处理程序”线程 - 所以如果我有三个设备(A,B,C)向我发送这些特殊请求,则每个设备都有自己的“处理程序”线程(1-A,2-B,3-C)

我有一个像这样定义的线程池类:

class threadController(threading.Thread)
   threadPool = []

当我收到新请求时,我查看所有正在运行的线程,以匹配特定的线程,并将请求传递给它。

这似乎在Windows下运行良好。

然而,在Linux上,似乎有时我的threadPool变量返回为空,我得到一个额外的线程。所以我有一个设备(A)发送请求,但最终有两个线程(1-A和2-A)。

这是奇怪的事情:它总是一个额外的线程,永远不会更多。无论我的设备(A)发送5个请求,还是30个。

我正在使用mod_wsgi(3.3)进行django集成。

注意:我意识到这是处理会话的一种有点非常规的方式。我不是在寻找一种更好地处理会话的方法 - 我已经知道有更好的方法:)

1 个答案:

答案 0 :(得分:1)

在Windows上,只有一个Apache子进程处理请求。在非Windows系统上,如果使用嵌入模式,则可能有多个进程。

使用mod_wsgi守护程序及其默认的单个进程。参见:

http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide#Delegation_To_Daemon_Process

http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading