Django 2/3 每次保存模型时,只有一个post_save生成的芹菜信号被接收



我使用多个post_save函数来触发不同的芹菜(4.4.0,4.8.3(任务,并尝试了Django 2和3。出于某种奇怪的原因,芹菜停止并行执行所有任务,而是每次保存模型时只接收一个任务。其他任务甚至没有收到。

要运行所有任务,我必须多次保存模型。它以前是有效的,我不知道为什么行为突然改变了。

我正在启动队列:

celery -A appname worker -l info -E

我的帖子保存功能:

@receiver(models.signals.post_save, sender=RawFile)
def execute_rawtools_qc(sender, instance, created, *args, **kwargs):
rawtools_qc.delay(instance.path, instance.path)
@receiver(models.signals.post_save, sender=RawFile)
def execute_rawtools_metrics(sender, instance, created, *args, **kwargs):
rawtools_metrics.delay(instance.abs_path, instance.path)

我的任务:

@shared_task
def rawtools_metrics(raw, output_dir):
cmd = rawtools_metrics_cmd(raw=raw, output_dir=output_dir)
os.system(cmd)
@shared_task    
def rawtools_qc(input_dir, output_dir):
cmd = rawtools_qc_cmd(input_dir=input_dir, output_dir=output_dir)
os.system(cmd)

在那些任务之前,一旦保存模型,就会并行执行。现在,第一个任务在保存模型实例时执行,第二个实例在第二次保存模型时执行。然后函数每次交替。知道是什么导致了这种奇怪的行为吗?

更新:我认为这两个任务都是随机执行的,但每次保存只有一个。

此外,没有其他芹菜工人在运行。

如果为同一模型运行这两个函数,请以相同的post_save方法运行它们:

@receiver(models.signals.post_save, sender=RawFile)
def execute_rawtools_qc(sender, instance, created, *args, **kwargs):
rawtools_qc.delay(instance.path, instance.path)
rawtools_metrics.delay(instance.abs_path, instance.path)

相关内容

  • 没有找到相关文章

最新更新