Django 每个模型对象的芹菜任务。跟踪进度的最干净方法
我有分布式硬件传感器节点,这些节点将被芹菜任务查询。每个传感器节点都有一个相关对象,用于保存最近的读数和配置数据 我从不想让一个以上的芹菜任务询问一个传感器节点。但是,当节点仍在处理之前的请求时,请求可能会来询问节点 我在任何芹菜文档中都没有看到这种任务跟踪的例子。但我认为这是一个相当普遍的要求 我的第一个想法是在任务开始和结束时用一个类似于task_in_progress的标志标记模型对象Django 每个模型对象的芹菜任务。跟踪进度的最干净方法,django,celery,django-celery,Django,Celery,Django Celery,我有分布式硬件传感器节点,这些节点将被芹菜任务查询。每个传感器节点都有一个相关对象,用于保存最近的读数和配置数据 我从不想让一个以上的芹菜任务询问一个传感器节点。但是,当节点仍在处理之前的请求时,请求可能会来询问节点 我在任何芹菜文档中都没有看到这种任务跟踪的例子。但我认为这是一个相当普遍的要求 我的第一个想法是在任务开始和结束时用一个类似于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)
您可能希望确保正确解锁(最后尝试除外)
这是芹菜的例子