芹菜任务中的例外情况

时间:2015-12-14 09:17:29

标签: django celery

tasks.py

@shared_task(bind=True, default_retry_delay=60, max_retries=3)
def index_city(self, pk):
    from .models import City
    try:
        city = City.objects.get(pk=pk)
    except City.ObjectDoesNotExist:
        self.retry()
    #Do stuff here with City

当我在没有.delay的情况下调用上述任务时,它可以正常工作。当我在开发环境中使用.delay调用任务并运行芹菜时,它也可以正常工作。但是,在生产中,会抛出以下异常:

type object 'City' has no attribute 'ObjectDoesNotExist'

我添加time.sleep(10)以排除任何竞争条件,但这没有效果,但仍然抛出了异常。该对象确实存在,所以看起来城市的内联导入没有发生(内联导入是为了防止循环导入问题)任何想法如何解决这一点将不胜感激。

堆栈

  • Django 1.8.5
  • Python 2.7.10
  • sqlite on dev和postgresql on production

1 个答案:

答案 0 :(得分:4)

您应该使用City.DoesNotExistdjango.core.exceptions.ObjectDoesNotExist代替City.ObjectDoesNotExisthttps://docs.djangoproject.com/en/1.9/ref/exceptions/#objectdoesnotexist