IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Gunicorn 信号处理

    Yiran\'s Blog发表于 2021-06-27 18:55:41
    love 0
    背景 链接到标题 最近在项目中使用到了 Gunicorn 的 Graceful Shutdown 功能,阅读代码学习一下 Gunicorn 的信号处理。 Master 链接到标题 Gunicorn 启动入口: WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run() BaseApplication().run() Arbiter(self).run() Master 主要控制逻辑实现在 Arbiter 中,包括信号处理和主循环逻辑。在调用 Arbiter().run() 会最终调用到 Arbiter.init_signals() ,在该函数中会将 Master 中定义的需要处理的信号函数进行相应的注册: Arbiter().run(): Arbiter().start() Arbiter().init_signals() # 初始化 Master 信号处理 # initialize all signals for s in self.SIGNALS: # "HUP QUIT INT TERM TTIN TTOU USR1 USR2 WINCH" signal.signal(s, self.signal) signal.signal(signal.SIGCHLD, self.handle_chld) 所有定义的信号处理函数都是 Aribiter().signal() ,该函数将接收到的信号存放在 Arbiter.SIG_QUEUE 中,最多保留 5 个信号,然后触发 Arbiter().wakeup() ,在 Arbiter().wakeup() 中,向 Arbiter.


沪ICP备19023445号-2号
友情链接