Bas*_*asj 11 python apache mod-wsgi wsgi bottle
我知道不建议在生产中运行Bottle或Flask应用程序,python myapp.py --port=80因为它只是一个开发服务器.
我认为也不建议运行它python myapp.py --port=5000并将其链接到Apache:RewriteEngine On,RewriteRule /(.*) http://localhost:5000/$1 [P,L](或者我错了?),因为WSGI是首选.
所以我现在正在设置Python app <-> mod_wsgi <-> Apache(没有gunicorn或其他工具来保持简单).
问题:当使用WSGI时,我知道它是Apache,mod_wsgi并且会myapp.py在请求到来时自动启动/停止运行足够的进程,但是:
例:
我做了一些更改myapp.py,并且我想重新启动运行它的所有进程,这些进程已由mod_wsgi启动(注意:我知道mod_wsgi可以观察源代码的更改,并重新启动,但这仅适用于对其进行的更改. wsgi文件,而不是.py文件.我已经读过touch myapp.wsgi可以解决这个问题,但更一般地说我希望能够手动停止并重新启动)
我想暂时停止整个应用程序myapp.py(它的所有实例)
我不想用service apache2 stop它,因为我也用Apache 运行其他网站,而不仅仅是这个(我有几个VirtualHosts).出于同样的原因(我使用Apache运行其他网站,而某些客户端可能同时下载1 GB文件),我不希望这样做service apache2 restart会对使用Apache的所有网站产生影响.
我正在寻找比kill pidSIGTERM等更清洁的方式(因为我读过它不建议在这种情况下使用信号).
注意:我已经阅读了如何从mod_wsgi执行优雅的应用程序关闭,它有所帮助,但这里是补充问题,而不是重复.
安装:
apt-get install libapache2-mod-wsgi
a2enmod wsgi # might be done automatically by previous line, but just to be sure
Run Code Online (Sandbox Code Playgroud)Apache配置(来源:Bottle doc):
<VirtualHost *:80>
ServerName example.com
WSGIDaemonProcess yourapp user=www-data group=www-data processes=5 threads=5
WSGIScriptAlias / /home/www/wsgi_test/app.wsgi
<Directory />
Require all granted
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
应该有多达5个进程,是吗?正如之前在问题中所述,如何知道有多少正在运行,如何阻止它们?
/home/www/wsgi_test/app.wsgi(来源:Bottle doc)
import os
from bottle import route, template, default_app
os.chdir(os.path.dirname(__file__))
@route('/hello/<name>')
def index(name):
return template('<b>Hello {{name}}</b>!', name=name)
application = default_app()
Run Code Online (Sandbox Code Playgroud)部分取自这个问题,添加display-name到WSGIDaemonProcess以便您可以使用如下命令来获取它们:
ps aux | grep modwsgi\nRun Code Online (Sandbox Code Playgroud)\n\n将其添加到您的配置中:
\n\nDefine GROUPNAME modwsgi\nWSGIDaemonProcess yourapp user=www-data group=www-data processes=5 threads=5 display-name=%{GROUPNAME}\nRun Code Online (Sandbox Code Playgroud)\n\n更新
\n\n有几个原因导致 ps 不给你DaemonProcess display-name.
\n如文档所示:
\n\n\ndisplay-name=value 定义使用 ps 命令列出进程时为守护进程显示的不同名称。如果值为\n %{GROUP},则名称将为 (wsgi:group),其中 group 将被替换\n 为守护进程进程组的名称。
\n\n请注意,只能显示所提供值的字符数,\n 与执行进程的 argv0 最初占用的字符数相同。任何超出此范围的内容都会被截断。
\n\n此功能可能无法按照描述在所有平台上工作。通常,它还需要具有 BSD 传统的 ps 程序。因此,在某些版本的 Solaris UNIX 上,/usr/bin/ps 程序\xe2\x80\x99 无法工作,但 /usr/ucb/ps\n 可以。其他可以显示该值的程序包括 htop。
\n
你可以:
\n\n设置display-name较小的长度:
WSGIDaemonProcess yourapp user=www-data group=www-data processes=5 threads=5 display-name=wsws\nRun Code Online (Sandbox Code Playgroud)\n\n并尝试通过以下方式找到它们:
\n\nps aux | grep wsws\nRun Code Online (Sandbox Code Playgroud)\n\n或者将其设置为%{GROUP}并使用守护进程进程组的名称 (wsgi:group) 进行过滤。
| 归档时间: |
|
| 查看次数: |
1137 次 |
| 最近记录: |