我在使用Python2.7+Apache+mod\wsgi开发一个小型web服务器时遇到了一些不寻常的情况。此服务器的主要用途是:接收来自另一个服务器(服务器A)的常规请求,并将请求主体放入数据库中。在
使用一些后台线程解析DB中的请求体,并将解析后的信息发送到第三个服务器(serverb)。在
Apache被配置为Windows'winnt'MPM模式。代码调度.py,即入口点,如下所示:from urlparse import parse_qs
pool = MyThreadClass() # A customized thread class to parse request body in DB
pool.start()
def application(environ, start_response):
# Receiving regular request from server A and put request body into BD
output = 'OK'
start_response('200OK', [('Content-Type', 'text/plain')])
return [output]
一开始,thread类是在服务器启动时创建的,它运行得很好。然而,几个小时后,我发现线程类(MyThreadClass)将再次实例化,这意味着此时将有两个MyThreadClass实例在后台运行。
我不知道在Apache启动时创建这样的实例是否正确。你有什么想法吗?在
[edit1]下面是apache中wsgi部分的配置:
^{pr2}$
[edit2]我按照@Graham的指示,将LogLevel设置为“info”。我想我已经找到原因了,但无法解释原因!
下面是访问日志和错误日志的日志。我的服务器正在监听8080。前三行错误.log在服务器启动时记录。然而,在2011年16:36:18的访问日志中,有一个来自124.237.78.181的调用请求http://g.ha99y.com/R.asp?P=123.157.218.85:8080。此时,在错误日志中,服务器加载调度程序.py再一次。我无法解释这个电话从哪里来,为什么会产生两个口译员我的主机:8080|'和'我的主机|'. 在
访问.log:124.237.78.181 - - [20/Dec/2011:16:36:18 +0800] "GET http://g.ha99y.com/R.asp?P=123.157.218.85:8080 HTTP/1.1" 404 29
错误.log:[Tue Dec 20 15:50:14 2011] [info] mod_wsgi (pid=1008): Create interpreter 'myhost.com:8080|'.
[Tue Dec 20 15:50:14 2011] [info] mod_wsgi (pid=1008): Adding 'E:/eclipse workspace/SubscriptionServer/src' to path.
[Tue Dec 20 15:50:14 2011] [info] [client 66.220.151.121] mod_wsgi (pid=1008, process='', application='myhost.com:8080|'): Loading WSGI script 'E:/eclipse workspace/SubscriptionServer/src/business/dispatcher.py'.
[Tue Dec 20 16:36:19 2011] [info] mod_wsgi (pid=1008): Create interpreter 'myhost.com|'.
[Tue Dec 20 16:36:19 2011] [info] mod_wsgi (pid=1008): Adding 'E:/eclipse workspace/SubscriptionServer/src' to path.
[Tue Dec 20 16:36:19 2011] [info] [client 124.237.78.181] mod_wsgi (pid=1008, process='', application='myhost.com|'): Loading WSGI script 'E:/eclipse workspace/SubscriptionServer/src/business/dispatcher.py'.