你能帮我解决这个问题吗?
我正在使用mod_wsgi
运行Apache 2.2.22我正确配置WSGI以处理多个线程并使用Python 我需要处理来自同一浏览器的并行请求,但wsgi可以提供的唯一并行请求来自不同的浏览器(或1个浏览器选项卡+隐身中的1个选项卡)。
我尝试了嵌入式和守护进程。
Apache配置:
WSGIDaemonProcess appname processes=5 threads=25 display-name=%{GROUP}
WSGIProcessGroup appname
WSGIScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
AddHandler wsgi-script .py
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
#Require all granted
</Directory>
我把wsgi.py放在/ usr / lib / cgi-bin目录下用755 mod
wsgi.py的内容:
import os, sys
import time
from datetime import datetime
def application(environ, start_response):
sys.stderr.write("before wait time = %s\n" % str(datetime.now()))
sys.stderr.write("client= %s\n" % environ['REMOTE_ADDR'])
sys.stderr.write("waiting\n")
print >> sys.stderr, 'mod_wsgi.process_group = %s' % repr(environ['mod_wsgi.process_group'])
time.sleep(10)
sys.stderr.write("wait finished time = %s\n" % str(datetime.now()))
status = '200 OK'
output = 'Hello World!'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
在请求http://my.ip/cgi-bin/wsgi.py时,我的一切都很好,但是当我在单个浏览器的2个选项卡中并行运行时,第二个选项卡正在等待第一个完成... 日志:
[Tue Sep 02 18:25:06 2014] [error] before wait time = 2014-09-02 18:25:06.365133
[Tue Sep 02 18:25:06 2014] [error] client= 192.168.113.35
[Tue Sep 02 18:25:06 2014] [error] waiting
[Tue Sep 02 18:25:06 2014] [error] mod_wsgi.process_group = 'appname'
[Tue Sep 02 18:25:16 2014] [error] wait finished time = 2014-09-02 18:25:16.371944
[Tue Sep 02 18:25:16 2014] [error] before wait time = 2014-09-02 18:25:16.390348
[Tue Sep 02 18:25:16 2014] [error] client= 192.168.113.35
[Tue Sep 02 18:25:16 2014] [error] waiting
[Tue Sep 02 18:25:16 2014] [error] mod_wsgi.process_group = 'appname'
[Tue Sep 02 18:25:26 2014] [error] wait finished time = 2014-09-02 18:25:26.400464
答案 0 :(得分:0)
如果这与浏览器回收与服务器的开放连接以发送后续请求有关,我不会感到惊讶。如果它为隐身标签发送的请求打开新连接,则允许服务器上的单独线程处理它;这项工作正常表明您的WSGI设置基本上没问题。