检查 Celery 队列中是否有来自 Python 的任务



我有一个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子类的实例)被推送时。除非 deps 中的所有实例都已由 Celery 处理,否则我无法推送a。换句话说,我需要序列化任务,以便遵守依赖顺序。

芹菜是这样运行的:

celery -A server worker -P eventlet -c 100

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

谢谢你的帮助。

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

好的一面是它保持简单,我可以快速实施它。

不利的一面是,我暂时锁定了一个工作线程,并且可能锁定了许多同步 SOAP 操作,而不是跨工作线程调度这些操作。

相关内容

  • 没有找到相关文章

最新更新