Ihre zusätzlichen Threads müssen von derselben App initiiert werden, die vom WSGI-Server aufgerufen wird.
Im folgenden Beispiel wird ein Hintergrundthread erstellt, der alle 5 Sekunden ausgeführt wird und Datenstrukturen bearbeitet, die auch für Flask-Routing-Funktionen verfügbar sind.
import threading
import atexit
from flask import Flask
POOL_TIME = 5
commonDataStruct = {}
dataLock = threading.Lock()
yourThread = threading.Thread()
def create_app():
app = Flask(__name__)
def interrupt():
global yourThread
yourThread.cancel()
def doStuff():
global commonDataStruct
global yourThread
with dataLock:
yourThread = threading.Timer(POOL_TIME, doStuff, ())
yourThread.start()
def doStuffStart():
global yourThread
yourThread = threading.Timer(POOL_TIME, doStuff, ())
yourThread.start()
doStuffStart()
atexit.register(interrupt)
return app
app = create_app()
Nennen Sie es von Gunicorn mit so etwas:
gunicorn -b 0.0.0.0:5000 --log-config log.conf --pid=app.pid myfile:app