Я знаю, что не рекомендуется запускать приложение "Бутылка или python myapp.py --port=80
при python myapp.py --port=80
с помощью 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
(без оружия или другого инструмента, чтобы все было просто).
Вопрос: при использовании WSGI я знаю это Apache и mod_wsgi
, которые автоматически запускают/останавливают достаточно процессов, запускающих myapp.py
когда будут поступать запросы, но:
- как я могу вручную остановить эти процессы?
- в более общем плане, есть ли способ контролировать их/знать, сколько процессов, запущенных mod_wsgi, в настоящее время все еще работает? (одна из причин, среди прочего, заключается в том, чтобы проверить, прекращаются ли процессы после запроса или если они будут работать)
Пример:
-
Я внес некоторые изменения в
myapp.py
, и я хочу перезапустить все запущенные им процессы, которые были запущены mod_wsgi (Примечание: я знаю, что mod_wsgi может просматривать изменения в исходном коде и перезапускать, но это работает только при внесенных изменениях в файле.wsgi, а не в файле.py. Я уже прочитал, чтоtouch myapp.wsgi
может быть для вас решением, но в целом я бы хотел остановить и перезапустить вручную) -
Я хочу временно остановить все приложение
myapp.py
(все его экземпляры)
Я не хочу использовать service apache2 stop
для этого, потому что я также запускаю другие сайты с Apache, а не только этот (у меня есть несколько VirtualHosts
). По той же причине (я запускаю другие веб-сайты с Apache, и некоторые клиенты могут одновременно загружать 1 ГБ файл), я не хочу service apache2 restart
, что повлияет на все сайты, использующие Apache.
Я ищу более чистый способ, чем kill pid
или SIGTERM и т.д. (Потому что я читал, что в этом случае не рекомендуется использовать сигналы).
Примечание. Я уже прочитал. Как сделать изящное закрытие приложения из mod_wsgi, это помогло, но здесь это дополнительные вопросы, а не дубликаты.
Моя текущая установка Python + Apache + mod_wsgi:
-
Монтаж:
apt-get install libapache2-mod-wsgi a2enmod wsgi # might be done automatically by previous line, but just to be sure
-
Конфигурация 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 /home/www/wsgi_test> WSGIProcessGroup yourapp WSGIApplicationGroup %{GLOBAL} Require all granted </Directory> </VirtualHost>
Там должно быть до 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()