我正在编写一个服务器,用于使用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 设计的信息