Estoy tratando de iniciar un nuevo subproceso en Python dentro de una aplicación Flask. Estoy haciendo un trabajo de fondo que se desencadena con la solicitud, pero no necesito esperar a que se realice el trabajo para responder a la solicitud.Frasco que arroja 'trabajo fuera del contexto de solicitud' al iniciar el subproceso
¿Es posible establecer la solicitud del matraz en esta sub-amenaza a la solicitud que entró? Por lo que respecta a la razón, nuestra ACL en nuestras consultas a nuestro DB (mongoengine frente a mongoDB) depende del usuario de la solicitud (lo agarra del objeto de solicitud del matraz) para ver si tienen acceso a los objetos, y explota porque la solicitud es no disponible en el sub thread
Cualquier idea sería muy apreciada.
Aquí hay un pseudo código de cómo lo estoy manejando ahora, pero no está funcionando.
@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"
Si sólo necesita el usuario entonces por qué no sólo tiene que pasar el usuario en el sub-hilo? El matraz –
proporciona acceso a la solicitud en cualquier momento, por lo que mi clase base de documento tiene un administrador de conjunto de consultas que capta al usuario de la solicitud. El trabajo que estoy haciendo es mucho más alto que el administrador del conjunto de consultas, así que no puedo usar el usuario solo – MattoTodd
La solicitud es un subproceso/contexto local por lo que no está disponible * any * time; de lo contrario, no tendrías este problema . Sigo pensando que debería intentar refactorizar la dependencia del objeto de solicitud. –