2017-05-11 1 views
1

Ich starte meine Flask-App direkt über den Interpreter.Wie starte ich Hintergrund-Threads, wenn ich eine Flask-App durch Gunicorn starte?

if __name__ == '__main__': 
    t = Thread(target=run_schedule) 
    t.start() 
    context = ('cert.pem', 'key.pem') 
    app.run(host='0.0.0.0',port=8080,debug=False,ssl_context=context) 

Die run_schedule Funktion Schleifen immer, Entsperrung hin und wieder eine Aufgabe zu tun.

Offenbar soll ich einen WSGIServer wie Gunicorn verwenden, wenn ich nicht mehr debugge, aber es ruft das Modul nicht durch main(), so dass der Thread nicht startet.

Sie außerhalb dieses Blocks zu platzieren wird nicht funktionieren, weil dann der Thread gestartet würde, wenn ein anderer Code das Modul importiert!

@before_first_request ist fast das, was ich brauche, aber es erfordert, dass ich zuerst den Server mit einer Anfrage stoße. Nicht ideal.

Was ist der empfohlene Weg, es zu tun? (Oder funktionieren Hintergrundthreads gegen die wsgi-Philosophie?)

+1

Sie sollten keine Hintergrundthreads in Ihrer Serveranwendung erzeugen. Zum Beispiel kann ein WSGI-Server [möglicherweise mehrere Server-Apps erzeugen] (http://www.gwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html#adding-concurrency-and-monitoring) und dann haben Sie mehrere Hintergrundthreads. Schauen Sie stattdessen in [Cronjobs] (https://en.wikipedia.org/wiki/Cron) oder [Job-Warteschlangen wie Sellerie] (http://www.celeryproject.org/). –

+1

Gotcha, danke. Willst du es zu einer Antwort bewegen, damit ich es akzeptieren kann? –

+1

Fertig, danke –

Antwort