在Django Admin中保存新对象并将其发送到Celery任务后,匹配查询不存在

时间:2015-06-21 17:25:40

标签: python django celery

我在Django Admin(Django 1.8)中保存一个对象并将它们传递给Celery Task。不幸的是,我收到了一个错误[有时!]:"匹配查询不存在"。我知道这是交易的问题,但解决这个问题的最佳方法是什么?

int contTotal = 0;  
double result = 0;
    for(DoubleWritable val : valores) {
        contTotal += val.get();
    }
    result = (contTotal/714861) *100; 

问题是Django Admin中的整个视图位于transaction.atomic()块中。而且有时芹菜在交易结束时运行得更快。我想知道解决这个问题的最佳方法是什么。在调用celery_task时添加eta是一个令人毛骨悚然的想法我认为(或者可能不是?) - class MyModelAdmin(admin.ModelAdmin) def save_model(self, request, obj, form, change): super(MyAdmin, self).save_model(request, obj, form, change) if not change: celery_task.delay(obj.pk) @app.task() def celery_task(obj_pk): MyModel.objects.get(pk=obj_pk)

1 个答案:

答案 0 :(得分:1)

我认为eta是个好主意。但是竞争条件的可能性仍然存在,因此,eta可以@app.task(default_retry_delay=60, max_retries=3) # retry in 1 minute with maximum 3 retries def celery_task(obj_pk): try: MyModel.objects.get(pk=obj_pk) except MyModel.DoesNotExist, exc: celery_task.retry(exc=exc) 进行故障转移:

rails generate controller welcome index