Django 每个模型对象的芹菜任务。跟踪进度的最干净方法

Django 每个模型对象的芹菜任务。跟踪进度的最干净方法,django,celery,django-celery,Django,Celery,Django Celery,我有分布式硬件传感器节点,这些节点将被芹菜任务查询。每个传感器节点都有一个相关对象,用于保存最近的读数和配置数据 我从不想让一个以上的芹菜任务询问一个传感器节点。但是,当节点仍在处理之前的请求时,请求可能会来询问节点 我在任何芹菜文档中都没有看到这种任务跟踪的例子。但我认为这是一个相当普遍的要求 我的第一个想法是在任务开始和结束时用一个类似于task_in_progress的标志标记模型对象 任务实例化中有什么东西可以用来更好地实现任务跟踪吗?您想要的是将任务锁定在给定的资源上,芹菜上有一个非常

我有分布式硬件传感器节点,这些节点将被芹菜任务查询。每个传感器节点都有一个相关对象,用于保存最近的读数和配置数据

我从不想让一个以上的芹菜任务询问一个传感器节点。但是,当节点仍在处理之前的请求时,请求可能会来询问节点

我在任何芹菜文档中都没有看到这种任务跟踪的例子。但我认为这是一个相当普遍的要求

我的第一个想法是在任务开始和结束时用一个类似于task_in_progress的标志标记模型对象


任务实例化中有什么东西可以用来更好地实现任务跟踪吗?

您想要的是将任务锁定在给定的资源上,芹菜上有一个非常好的示例

为了总结该示例,建议使用缓存密钥来持有锁,任务将在启动前检查锁密钥(您可以生成特定于实例的缓存密钥,如“传感器-%(id)s”),并仅在未设置缓存密钥的情况下执行

例如

def check_sensor(sensor_id):
    if check_lock_from_cache(sensor_id):
        ... handle the lock ...
    else:
        lock(sensor_id)
        ... use the sensor ...
        unlock(sensor_id)
您可能希望确保正确解锁(最后尝试除外)

这是芹菜的例子