如何防止WSGI启动多个实例

0 投票
2 回答
817 浏览
提问于 2025-04-17 13:09

我有一个用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应用程序设置为守护进程模式,并告诉它只使用一个进程。需要注意的是,这可能会对性能产生不好的影响。

撰写回答