Flask throwing 'working outside of request context' when starting sub thread

后端 未结 5 1767
遇见更好的自我
遇见更好的自我 2020-11-30 21:23

I am trying to start a new thread in Python inside of a Flask application. I am doing background work that gets triggered by the request, but I don\'t need to wait for the

5条回答
  •  一个人的身影
    2020-11-30 22:04

    Wrap your thread code in a test_request_context so you have access to context locals:

    @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):
            with app.test_request_context():
                from flask import request
                request = req
                # Do Expensive work
        thread.start_new_thread(handle_sub_view, (request))
        return "Thanks"
    

    Edit: it's worth pointing out that the thread will have a different context than the original request. You need to extract any interesting request data, such as the user ID, before spawning the thread. You can then grab a (different) user object in the sub-thread using the ID.

提交回复
热议问题