Как остановить бутылку WebServer при запуске с подпроцесса
-
27-09-2019 - |
Вопрос
Я хотел бы встроить велико Бутылка Веб-каркас в небольшое приложение (1-я цель - ОС Windows). Это приложение начинает бутылку веб-сервера благодаря модулю подпроцесса.
import subprocess
p = subprocess.Popen('python websrv.py')
Приложение для бутылок довольно просто
@route("/")
def index():
return template('index')
run(reloader=True)
Начинает веб-сервер по умолчанию в консоль Windows.
Все кажется хорошо, за исключением того, что я должен нажать Ctrl-C, чтобы закрыть бутылку WebServer. Я хотел бы, что Master App заканчивает веб-сервер, когда он отключается. Я не могу найти способ сделать это (P.terminate () не работает в этом случае, к сожалению)
Есть идеи?
заранее спасибо
Решение
Есть два способа выключить сервер перезарядки:
1) вы завершаете P (используя os.kill(p.pid)
или p.terminate()
) а затем измените время модификации «WebSRV.PY» (os.utime('websrv.py')
) Чтобы вызвать автоматическое отключение дочернего процесса.
2) вы прекращаете P с os.kill(p.pid, signal.SIGINT)
который идентичен Ctrl-C
неисправность.
Другие советы
Похоже, что процесс завершения не работает, если бутылка находится в режиме перезарядки. В этом случае он начинается с подпроцессором.
Если перезагрузка установлено значение false, терминал, кажется, работает нормально.
Начиная с 0,8.1. Перезагрузка сервера достаточно умна для очистки сиротных процессов. Теперь у вас есть несколько способов завершить сервер:
- Удар
Ctrl-C
или отправитьSIGINT
к родительскому процессу. (рекомендуемые) - Убить родительский процесс. Ребенок умрет изящно в течение 2 секунд.
- Убейте дочерний процесс или SYS.ESHIT () с любым кодом состояния, кроме 3. Родитель немедленно умрет.
У меня были проблемы с закрытием сервера для бутылок из строки в качестве бутылки, кажется, запускает запросы в подпроцессах.
Я в конце концов нашел решение было делать:
sys.stderr.close()
Внутри запроса (который передан на сервер бутылки и оси его).
Может быть, попробуйте сделать это в вашем процессе и посмотреть, получает ли бутылку.