我正在尝试在Flask应用程序内部的Python中启动新线程。我正在做由请求触发的后台工作,但是我不需要等待工作完成以响应请求。
是否可以在此子威胁中将烧瓶请求设置为传入的请求?原因是,对数据库的查询(在mongoDB前面的mongoengine)上的ACL依赖于请求的用户(它从flask的请求对象中获取它)来查看他们是否有权访问这些对象,并且因为请求是在子线程中不可用。
任何想法将不胜感激。
这是我现在如何处理它的伪代码,但是它不起作用。
@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"
将你的线程代码包装在中,test_request_context
这样你就可以访问本地上下文:
@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"
编辑:值得指出的是,该线程将具有与原始请求不同的上下文。在生成线程之前,你需要提取任何有趣的请求数据,例如用户ID。然后,你可以使用ID在子线程中获取一个(不同的)用户对象。
问题内容: 我正在尝试在Flask应用程序内部的Python中启动新线程。我正在做由请求触发的后台工作,但是我不需要等待工作完成以响应请求。 是否可以在此子威胁中将烧瓶请求设置为传入的请求?原因是,对数据库的查询(在mongoDB前面的mongoengine)上的ACL依赖于请求的用户(它从flask的请求对象中获取它)来查看他们是否有权访问这些对象,并且由于请求是在子线程中不可用。 任何想法将不
如何使用使这个应用程序工作?
我不太确定如何解决这个问题,不知道是否有人有任何建议或遇到类似的问题。 谢谢
问题内容: 我目前正在开发一个Python应用程序,希望在该应用程序上查看实时统计信息。我想使用它以使其易于使用和理解。 问题是我的Flask服务器应该在我的Python应用程序的最开始处启动,而在最末尾停止。它看起来应该像这样: 因为我需要我的应用程序上下文(用于统计),所以不能使用multiprocessing.Process。然后,我尝试使用threading.Thread,但是Werkze
我一直在尝试写一些java应用程序。这个应用程序想要运行的是处理一个文本文件。 但是,输入文本文件很大(超过200MB),我尝试将200MB拆分为四个拆分文件(每个50MB) 所以,每一个都只需要0.5秒,但是用这种线性运行,每一个也需要2秒。(worker1+0.5s,worker2+0.5s,worker3+0.5s,worker4)如果我可以同时运行4个线程,我预计这个应用程序只需要0.5秒
我在理解诸如/和/ 我试图创建九个,并让它们同时运行,以找出哪个是最有效的。 因此,当主函数启动时,我会锁定互斥锁,以确保线程不会启动,然后再告诉它们使用pthread_lock( 然后,我使用各种调度策略创建所有九个线程。完成后,我尝试使用pthread\u mutex\u unlock告诉所有线程同时启动( 但当我运行这个时,它永远不会解锁线程。主功能的“运行…”print语句将关闭,但线程从