我是python的新手,一般都有服务和apache的经验。所以我正在使用这个基于Python的应用程序,网络解析器,我想。它使用Flask及其内置的Web服务器Werkzeug ...虽然在VPS上它工作得很好,但是转移到多进程(+多线程)专用服务器我遇到了问题。
首先来自Flask的消息转移到生产WSGI服务器并放弃Werkzeug ...
和第二个,程序拒绝启动超过1个进程(可以有多个进程作为参数),说我不能同时拥有多线程和多进程环境(使用Werkzeug) ,对吗?)..我能够以1个进程作为参数启动应用程序,并且它可以工作并且只使用1个进程,并最终开始滞后于太多的请求......
所以我读了一些文章,并试图转向apache WSGI。按照指示,我做了以下步骤......
创建了一个文件夹 / var / www / app-server,然后使用以下代码创建了APPNAME.wsgi文件并将其放在该文件夹中:
import sys
sys.path.insert(0, '/var/www/app-server')
from APPNAME.server import app as application
转到apache config 并添加了以下代码
<VirtualHost *:9192>
ServerName server.name
WSGIDaemonProcess APPNAME user=apache group=apache threads=5
WSGIScriptAlias / /var/www/app-server/APPNAME.wsgi
<Directory /var/www/app-server>
WSGIProcessGroup APPNAME
WSGIApplicationGroup %{GLOBAL}
WSGIScriptReloading On
Require all granted
</Directory>
</VirtualHost>
已保存并重新启动apache ,添加了防火墙端口等。
所以现在基本上没有改变,虽然它正在运行,它仍然只使用1个进程,虽然现在我不需要通过参数告诉它这样做。当然现在它是&#34; httpd&#34;处理。和以前一样,只有一个过程在&#34;不同的名字&#34;。
我现在很迷茫,没有正确地做事吗?或者在python应用程序和apache之间是否需要另一个软件,如gunicorn或其他东西?
所以这对我来说不是一个很好的解决方案,我最终进入了应用程序的python源代码,并且明确地告诉它不要在app.start上使用线程我给了它&#34; threaded = False& #34;参数。现在它作为原始应用程序工作,并使用其原始Web服务器,并使用多个进程。
WSGI文件引用相同的代码和相同的应用程序,即使在应用程序中启用了多进程,它仍然只使用1个httpd进程。
拜托,任何有关如何使我的WSGI应用程序使用超过1个httpd进程的建议的人?谢谢!即使是在停机时间,应用程序仍在使用24个进程并使服务器保持40%的CPU使用率(8个内核,8个线程)。 top显示所有8个核心正忙。所以应用程序给服务器带来了一些压力,但几乎没有使用任何RAM,主要是它的CPU功率..因此在繁忙的流量时间它实际上会使服务器超载..
可能是它运行的应用程序的用户和组吗?它必须与WSGIProcessGroup中列出的组相同吗?
谢谢!