使用 Python2.7 + Apache + mod_wsgi 开发小型Web服务器时,我有些不寻常。该服务器的主要用途是:
Apache配置为 Windows'winnt'MPM 模式。 dispatch.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]
一开始,线程类是在服务器启动时创建的,并且运行完美。但是,几个小时后,我发现线程类(MyThreadClass)将再次实例化,这意味着此时会有两个 MyThreadClass实例运行后台。
我不知道在Apache启动时创建这样的实例是否正确。你有什么想法吗?
[edit1] 以下是apache中wsgi部分的配置:
WSGIScriptAlias / "E:/eclipse workspace/SubscriptionServer/src/business/dispatcher.py"
WSGIPythonPath "E:/eclipse workspace/SubscriptionServer/src"
<Directory "E:/eclipse workspace/SubscriptionServer">
Order deny,allow
Allow from all
</Directory>
[edit2] 我已按照@Graham给出的指示并将LogLevel设置为“info”。我想我找到了原因,但无法解释原因! 以下是访问日志和错误日志的日志。我的服务器正在侦听8080.服务器启动时会记录前三行error.log。但是,在 16:36:18 2011 时的访问日志中,有一个来自124.237.78.181的电话请求http://g.ha99y.com/R.asp?P=123.157.218.85:8080。就在那时,在错误日志中,服务器再次加载dispatcher.py。我无法解释这个电话的来源以及为什么它会创建两个解释器'myhost.com:8080 |'和'myhost.com |'。
access.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
error.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'.
答案 0 :(得分:1)
您可能修改了导致mod_wsgi重新加载的WSGI脚本文件。
使用以下方式关闭重新加载:
WSGIScriptReloading Off
每当您进行代码更改时,请确保重新启动Apache。
读:
http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode#Reloading_In_Embedded_Mode http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIScriptReloading