【问题标题】:Using thread.join() in Flask HTTP Route在 Flask HTTP 路由中使用 thread.join()
【发布时间】: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


【解决方案1】:

听起来,您正试图从用户接收一个请求,然后让应用程序使用线程。为此,请使用 celery 之类的内容,您可以将任务分配给工作线程。

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

【讨论】:

    猜你喜欢
    • 2022-07-07
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 2012-03-29
    相关资源
    最近更新 更多