【问题标题】:Gunicorn: multiple background worker threadsGunicorn:多个后台工作线程
【发布时间】:2020-06-16 09:55:26
【问题描述】:

设置:我的应用程序使用多个工作器并行处理元素。处理这些元素是 CPU 密集型的,所以我需要工作进程。该应用程序将通过 Flask API 和 GUnicorn 使用。 GUnicorn 本身有多个工作进程来并行处理请求。在 Flask API 中,请求数据被放入一个队列中,我的后台应用程序的工作进程从该队列中获取这些数据。

问题:分叉工作进程非常耗时,应用程序必须满足一定的速度要求。因此,我想在应用程序启动时生成后台工作进程。为避免混合结果,我需要 n 每个 GUnicorn 工作人员的后台工作进程。

问题:如何确定在构建期间我必须生成多少后台工作人员,以及如何将这些工作人员与 GUnicorn 工作人员联系起来?

方法:我可以通过导入workers 变量从gunicorn_config.py 读取GUnicorn 工人的数量。但是,此时,我不知道 GUnicorn 工作进程 ID。他们是否有我此时可以使用的内部 ID(例如,GUnicorn worker #1,...)?

【问题讨论】:

    标签: python multithreading gunicorn


    【解决方案1】:

    您需要注意(并考虑)gunicorn worker 可以随时停止(例如由于请求处理程序崩溃或处理超时)。因此,这意味着您的特定工作人员与特定 gunicorn 进程的硬连线不可能是永久性的。

    如果您想将您的工作人员链接到特定的 gunicorn 工作人员,那么每次重新启动 gunicorn 工作人员时都应该重新链接。

    一种方法是定义您自己的 post_fork handler 和/或 port_fork_init 来进行这种接线。

    最初,您可以启动所需数量的工作人员,然后post_fork 处理程序可以“借用”(或您称之为“链接”)他们到刚刚创建的工作人员。

    【讨论】:

    • 感谢您的建议。看起来很有希望。在其中一个服务器挂钩中创建和启动我的工作人员是否也有意义,如果我将它们设置为守护程序模式,当创建它们的 GUnicorn 工作人员崩溃时,这些工作人员是否会停止?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 2011-06-18
    相关资源
    最近更新 更多