在Flask HTTP路由中使用thread.join()



我正在编写一个服务器,用于使用Flask向客户端(浏览器(发送渲染图像。由于图像可能还没有准备好(仍在渲染(,我编写了以下代码来等待渲染线程,直到它完成。

@app_autoView.route("/autoviewimgs/<origin>/<identifier>")
def autoviewimgs(origin, identifier):
if identifier in renderThreads:
renderThreads[identifier].join()
return flask.send_from_directory(f'./latentspace/autoview/{origin}', identifier + '.png')

然而,似乎整个服务器都开始等待一个线程,所有其他HTTP请求都被阻止了。。。

我不知道python线程是否适合Flask或其他方法。。。

我已经按照@ParthS007的建议尝试了Celery,但服务器仍然被阻止,如以下代码所示:

@app_autoView.route("/autoviewimgs/<origin>/<identifier>")
def autoviewimgs(origin, identifier):
if identifier in renderThreads:
if not renderThreads[identifier].ready():
casename = renderThreads[identifier].get()
return flask.send_from_directory(f'./latentspace/autoview/{origin}', identifier + '.png')

听起来,你正试图从用户那里接收一个请求,然后让应用程序使用线程。为此,可以使用类似芹菜的东西,将任务交给工作线程。

阅读更多关于Flask 设计的信息

最新更新