【发布时间】:2021-09-05 22:39:53
【问题描述】:
我正在编写一个服务器,用于使用 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-threading 是否适合 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')
【问题讨论】:
-
不要在 Web 应用程序中使用线程。在开发服务器中运行时,它们会阻塞,在生产设置中,它们可能随时被 WSGI 服务器踢出。
-
非常感谢。有没有其他方法可以在 Flask 中执行类似
threading的操作?
标签: python multithreading flask