美文网首页
celery 远程控制实现之 revoke

celery 远程控制实现之 revoke

作者: ValleyChan | 来源:发表于2020-03-16 21:39 被阅读0次

介绍

由于对 celery 在消息队列上实现远程控制的好奇,因而以 revoke 命令(取消任务)为例来研究其中的实现。

源码分析

  1. worker 端对 revoke 的实现
    image.png
  • 调用流: 任务的 revoke --> requestterminate --> 进程/线程 poolterminate --> 最终本质还是调用 os.kill(pid, signal)
  1. worker 端 revoke 在消息队列上的实现
    image.png
  • 调用流:revoke 注册到 Panel 类的类变量 data --> Paneldata 赋值给 Mailbox.Nodehandlers, worker 通过 on_message 来处理消息队列中的消息,实际上调用的 Mailbox.NodeTODO: 有关 kombu/pibox 的实现) 的 handle_message
  • 代码组织理解:注册函数的方式使得添加和减少控制器的函数不具有侵入性(不会改动源代码),并将控制器封装赋值给handlers。
  • 注册函数的实现:函数装饰器结合返回类方法实现注册函数的方式值得参考,使用类变量和类方法来实现全局注册,在需要注册隔离时可以采用实例方法,这里通过 type 字段区分不同注册功能函数。
  1. client 端 revoke 在消息队列上的实现
    image.png
  • 调用流:client 调用 controlrevoke 方法 --> 调用 controlbroadcast 方法 --> 调用 Mailbox_broadcast 方法 --> 调用 Mailbox_publish 方法。

相关文章

网友评论

      本文标题:celery 远程控制实现之 revoke

      本文链接:https://www.haomeiwen.com/subject/zrnoehtx.html