Attualmente sto sviluppando un'applicazione Python su cui voglio vedere le statistiche in tempo reale. Volevo usare Flask
per renderlo facile da usare e da capire.Avvio di un'applicazione del matraccio in una filettatura separata
Il problema è che il mio server Flask dovrebbe avviarsi proprio all'inizio della mia applicazione Python e fermarsi alla fine. Esso dovrebbe essere simile a questo:
def main():
""" My main application """
from watcher.flask import app
# watcher.flask define an app as in the Quickstart flask documentation.
# See: http://flask.pocoo.org/docs/0.10/quickstart/#quickstart
app.run() # Starting the flask application
do_my_stuff()
app.stop() # Undefined, for the idea
Perché ho bisogno del mio contesto di applicazione (per le statistiche), non posso usare un multiprocessing.Process
. Poi ho cercato di utilizzare un threading.Thread
, ma sembra che Werkzeug non piace:
* Running on http://0.0.0.0:10079/
Exception in thread Flask Server:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 763, in run
self.__target(*self.__args, **self.__kwargs)
File ".../develop-eggs/watcher.flask/src/watcher/flask/__init__.py", line 14, in _run
app.run(host=HOSTNAME, port=PORT, debug=DEBUG)
File ".../eggs/Flask-0.10.1-py2.7.egg/flask/app.py", line 772, in run
run_simple(host, port, self, **options)
File ".../eggs/Werkzeug-0.7-py2.7.egg/werkzeug/serving.py", line 609, in run_simple
run_with_reloader(inner, extra_files, reloader_interval)
File ".../eggs/Werkzeug-0.7-py2.7.egg/werkzeug/serving.py", line 524, in run_with_reloader
signal.signal(signal.SIGTERM, lambda *args: sys.exit(0))
ValueError: signal only works in main thread
Come posso farlo senza correre Flask nel thread principale?
Ho ho fatto funzionare Flask applicazioni in un thread separato, quindi questo errore che stai vedendo è sorprendente. Hai il traceback completo? –
Aggiunto il traceback completo – FunkySayu
In qualche modo hai impostato 'app.debug = True'? –