2012-06-17 79 views
0

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

这个想法是,我有一个“处理程序”线程每个请求源 - 所以如果我有三个设备(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

在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

+0

是的,这正是这个问题,MPM是不同的。我根据你的第二个链接调整了apache设置,并且工作正常。 – Goro