Вопрос

Я хотел бы встроить велико Бутылка Веб-каркас в небольшое приложение (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()

Внутри запроса (который передан на сервер бутылки и оси его).

Может быть, попробуйте сделать это в вашем процессе и посмотреть, получает ли бутылку.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top