如何防止WSGI启动多个实例
我有一个用Python写的网页应用程序,我在Apache服务器上配置成这样:
WSGIScriptAlias /firetalk /scripts/firetalkServer2
当我通过JavaScript使用XMLHttpRequest访问这个应用时,WSGI/Apache会启动多个实例,这让我想要实现的功能出现了问题。
所以,有没有办法限制WSGI/Apache只启动一个指定的Python脚本实例呢?
谢谢。
2 个回答
1
这段内容主要是在回答关于其他回答中所提到的需求的资格问题。
WSGIDaemonProcess firetalk # Uses default of single process and 15 threads.
WSGIDaemonProcess django processes=5 threads=3
WSGIScriptAlias /firetalk /scripts/firetalkServer2 \
process-group=firetalk application-group=%{GLOBAL}
WSGIScriptAlias / /scripts/djangoServer \
process-group=django application-group=%{GLOBAL}
firetalk 应用程序将运行在一个进程中,但会有 15 个线程。
Django 应用程序将会使用多个进程。
需要使用 mod_wsgi 3.0 或更高版本,因为它使用了 process-group/application-group 选项来设置 WSGIScriptAlias。使用这些选项意味着 WSGI 脚本在进程启动时就会被预加载。
另外一种做法可以是:
WSGIDaemonProcess firetalk # Uses default of single process and 15 threads.
WSGIDaemonProcess other processes=5 threads=3
WSGIScriptAlias /firetalk /scripts/firetalkServer2
<Location /firetalk>
WSGIProcessGroup firetalk
WSGIApplicationGroup %{GLOBAL}
</Location>
WSGIScriptAlias / /scripts/djangoServer
WSGIProcessGroup other
firetalk 应用程序将运行在一个进程中,但会有 15 个线程。
其他应用程序会分布在多个进程中,每个进程都有自己独立的子解释器。
WSGI 脚本会在第一次请求时才加载。
2
把WSGI应用程序设置为守护进程模式,并告诉它只使用一个进程。需要注意的是,这可能会对性能产生不好的影响。