Gunicorn 与多个工人:有没有一种简单的方法可以只执行一次某些代码?

Posted

技术标签:

【中文标题】Gunicorn 与多个工人:有没有一种简单的方法可以只执行一次某些代码?【英文标题】:Gunicorn with multiple workers: Is there an easy way to execute certain code only once? 【发布时间】:2014-07-28 21:33:20 【问题描述】:

如果我以 -w 4 启动 gunicorn 并使用包含内容的应用程序

print 'hello'

它将打印四次'hello'。有没有办法以只打印一个'hello' 的方式进行协调?我想在开始时进行一些清理,我希望只执行一次。

【问题讨论】:

嘿@ben,你实施了 Eevee 的解决方案吗?你介意张贴吗? 嘿@MatthewMoisen。我编辑了 Eevee 的答案以包含我的实现。 【参考方案1】:

您可以写一个server hook,例如on_starting,它将在主进程中运行,因此只发生一次。

我认为这些只有在您使用 Python 脚本进行配置时才有效,例如在 their example 中。


(这是OP说话):

对我有用的是创建一个包含以下内容的配置文件“my_conf.py”:

def on_starting(server):
     print(1)

然后

gunicorn [...] -w 2 -c my_conf.py &

在服务器启动时仅打印一次“1”,尽管指定使用两个工作人员。

【讨论】:

以上是关于Gunicorn 与多个工人:有没有一种简单的方法可以只执行一次某些代码?的主要内容,如果未能解决你的问题,请参考以下文章

在 gunicorn 工人之间共享一把锁

Gunicorn 多个烧瓶工人和绑定任务 celery

Gunicorn - 如果客户端关闭他们的连接,如何杀死工人?

对Gunicorn的架构进行简要描述

Ray 究竟是如何与工人共享数据的?

从多个火花工人以镶木地板格式保存