【问题标题】:Inspecting Celery queues for tasks from Python从 Python 检查 Celery 队列中的任务
【发布时间】:2016-03-19 11:43:59
【问题描述】:

我有一个 Django+Celery 应用程序,其中 Celery 用于将 Django 模型实例推送(和拉取)到第三方 SOAP 服务。

我的 Django 模型之间存在依赖关系,并且还有一个简单的哈希,如下所示:

class MyModel(Models):
    def get_dependencies(self):
        # ...
        return [...]

    def __hash__(self):
        return hash(self.__class__.__name__+str(self.pk))

这个哈希在我自己的实现中很方便,由于稳定​​性问题我不得不放弃它。芹菜是一个更坚实的基础。

当我将一个实例推送到 SOAP 服务时,我必须确保它的依赖项已被推送。这是通过检查所有相关实例的 pushed_ok 时间戳字段来完成的。

困难的部分是当一个实例a 依赖于实例列表deps(都是MyModel 子类的实例)被推送时。我无法推送a,除非deps 中的所有实例都已由Celery 处理。换句话说,我需要序列化任务,以便尊重依赖顺序。

Celery 是这样运行的:

celery -A server worker -P eventlet -c 100

如何防止其中一个小事件(/process/thread)在其依赖项(如果有)被其他小事件运行完成之前运行a

感谢您的帮助。

【问题讨论】:

    标签: python django celery


    【解决方案1】:

    我寻求了一个实用的解决方案,将资源的所有依赖项检查(包括将不同步的依赖项推送到soap服务器)移动到 celery 任务中。而不是尝试根据资源的依赖关系序列化任务。

    好处是它保持简单,我可以快速实现它。

    不利的一面是我暂时锁定了一个工作人员,并且可能会锁定许多同步 SOAP 操作,而不是在工作人员之间分派这些操作。

    【讨论】:

      猜你喜欢
      • 2020-09-15
      • 2015-06-16
      • 2013-11-20
      • 1970-01-01
      • 2020-05-20
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 2018-06-10
      相关资源
      最近更新 更多