Правильно интегрируйте wsgiref.simple_server и Flask в настольное приложение - PullRequest
0 голосов
/ 29 октября 2018

У меня проблемы с интеграцией Flask приложения, обслуживаемого wsgiref.simple_server, в настольное приложение.

Наша проблема в том, что мы должны запускать и останавливать сервер, когда пользователь входит в специальную область программного обеспечения, которая показывает приложение через браузер CEF.

Все работает хорошо, за исключением случаев, когда нам нужно остановить и запустить приложение.

Одна странная вещь случается с кодом, подобным этому:

import os
import time
import threading
from wsgiref.simple_server import make_server
from flask import Flask


def start(host='127.0.0.1', port=5000, app=None):
    global SERVER, THREAD

    SERVER = make_server(host, port, app)
    SERVER.timeout = 1
    threading.Thread(target=SERVER.serve_forever, daemon=True).start()

def stop():
    global SERVER
    SERVER.shutdown()

def get_app():
    APP = Flask(__name__)

    @APP.route("/")
    def hello():
        return "Hello World!"

    return APP


if __name__ == '__main__':

    print("First start", flush=True)
    start("0.0.0.0", 5000, get_app())

    time.sleep(10)
    print("Start stop procedure", flush=True)
    stop()
    print("Stop", flush=True)


    print("Second start", flush=True)
    start("0.0.0.0", 5000, get_app())

    time.sleep(10)
    print("Start stop procedure", flush=True)
    stop()
    print("Stop", flush=True)

Очень странно, что мне нужен запрос, прежде чем сервер поймет, что нужно выключить

$ python test.py                                            
First start                                                 
127.0.0.1 - - [29/Oct/2018 17:04:36] "GET / HTTP/1.1" 200 12
Start stop procedure                                        
127.0.0.1 - - [29/Oct/2018 17:04:46] "GET / HTTP/1.1" 200 12 # the unwanted request
Stop                                                        
Second start                                                
127.0.0.1 - - [29/Oct/2018 17:04:56] "GET / HTTP/1.1" 200 12
Start stop procedure                                        
127.0.0.1 - - [29/Oct/2018 17:05:01] "GET / HTTP/1.1" 200 12# the unwanted request
Stop                                                        

Я не могу это контролировать. Это не происходит с заказным приложением wsgi.

Есть ли правильный способ остановить и запустить приложение Flask? Все решения в сети, похоже, не работают

...