El problema debe ser reproducible con los siguientes dos ejemplos mínimos:
Ejemplo mínimo con app.run()
from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return 'Hello' app.run() Ejemplo mínimo con gevent.pywsgi.WSGIServer
from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return 'Hello' from gevent import pywsgi from geventwebsocket.handler import WebSocketHandler server = pywsgi.WSGIServer(('127.0.0.1', 5000), app, handler_class=WebSocketHandler) server.serve_forever()Las primeras 5 líneas son idénticas, por lo que ambos ejemplos solo difieren en la forma en que inician el servidor. Ambos servidores funcionan, obtengo "Hola" en el navegador. El primer ejemplo imprime:
* Serving Flask app "1" (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 127.0.0.1 - - [20/Jun/2019 23:43:15] "GET / HTTP/1.1" 200 - 127.0.0.1 - - [20/Jun/2019 23:43:19] "GET / HTTP/1.1" 200 -Entonces, la salida de la consola muestra información sobre cada solicitud que maneja el servidor.
Sin embargo, con el segundo ejemplo, ya no obtengo ningún resultado de registro en la consola. ¿Cómo habilito el registro para gevent.pywsgi.WSGIServer y WebSocketHandler ?
Antecedentes (que no importa con respecto al problema, creo)
Estoy ejecutando una aplicación Flask que usa flask_sockets . Porque
El servidor de desarrollo Werkzeug no puede proporcionar al entorno WSGI una interfaz websocket
No puedo usar el servidor con app.run() y estoy usando gevent.pywsgi.WSGIServer en su lugar. El código de mi ejemplo anterior se toma directamente de los ejemplos del módulo en https://github.com/heroku-python/flask-sockets sin ninguna modificación.
Debería funcionar así, pero es un error en WebSocketHandler del módulo geventwebsocket que ya se informó: https://gitlab.com/noppo/gevent-websocket/issues/16
El registro funciona de manera diferente con gevent.pywsgi.WSGIServer . Utiliza el registro de python y es mucho más sofisticado y flexible.
Aquí hay un ejemplo:
from gevent import pywsgi from geventwebsocket.handler import WebSocketHandler import logging logging.basicConfig(level=logging.INFO) server = pywsgi.WSGIServer(('127.0.0.1', 5000), app, handler_class=WebSocketHandler) server.serve_forever()Y ahora donde quieras salida, puedes hacer:
logging.info("You can see me now...")Si desea ver la información de inicio de WSGIServer, establezca el nivel de registro en DEBUG y podrá ver toneladas de resultados.