Ich versuche, einen neuen Thread in Python innerhalb einer Flask-Anwendung zu starten. Ich mache Hintergrundarbeit, die von der Anfrage ausgelöst wird, aber ich muss nicht warten, bis die Arbeit erledigt ist, um auf die Anfrage zu antworten.Flask werfend "außerhalb des Anfragekontexts arbeiten" beim Starten von Unter-Thread
Ist es möglich, die Flaschenanforderung in dieser Subbedrohung auf die eingehende Anfrage zu setzen? Der Grund dafür ist, dass unsere ACL auf unsere Anfragen an unsere DB (Mongoengine vor mongoDB) auf den Benutzer der Anfrage angewiesen ist (er nimmt es aus dem Anfrageobjekt von flask), um zu sehen, ob sie Zugriff auf die Objekte haben und dass die Anfrage explodiert nicht im Unter-Thread verfügbar.
Alle Gedanken würden sehr geschätzt werden.
Hier ist Pseudo-Code, wie ich es jetzt handle, aber es funktioniert nicht.
@app.route('/my_endpoint', methods=['POST'])
def my_endpoint_handler():
#do tracking in sub-thread so we don't hold up the page
def handle_sub_view(req):
from flask import request
request = req
# Do Expensive work
thread.start_new_thread(handle_sub_view, (request))
return "Thanks"
passieren Wenn Sie nur die Benutzer benötigen, warum dann nicht nur den Benutzer in das Gewinde Unter passieren? –
flask bietet jederzeit Zugriff auf die Anforderung, sodass meine Document-Basisklasse über einen Abfrage-Set-Manager verfügt, der den Benutzer von der Anfrage abruft. Die Arbeit, die ich mache, ist viel höher als die Abfrage-Set-Manager, so kann ich nicht einfach den Benutzer selbst verwenden – MattoTodd
Die Anfrage ist ein Thread/Kontext lokal, so dass es nicht verfügbar ist * anytime sonst hätten Sie dieses Problem nicht . Ich denke immer noch, dass Sie versuchen sollten, die Abhängigkeit vom Anforderungsobjekt neu zu definieren. –