【发布时间】:2014-12-10 07:44:00
【问题描述】:
我有一个 Django 应用程序,它使用 Celery 卸载一些任务。主要是延迟了数据库表中某些字段的计算。
所以,我有一个tasks.py:
from models import MyModel
from celery import shared_task
@shared_task
def my_task(id):
qs = MyModel.objects.filter(some_field=id)
for record in qs:
my_value = #do some computations
record.my_field = my_value
record.save()
在models.py中
from django.db import models
from tasks import my_task
class MyModel(models.Model):
field1 = models.IntegerField()
#more fields
my_field = models.FloatField(null=True)
@staticmethod
def load_from_file(file):
#parse file, set fields from file
my_task.delay(id)
现在显然,由于循环导入(models 导入 tasks 和 tasks 导入 models),这将不起作用。
我暂时通过从views.py 调用my_task.delay() 解决了这个问题,但是将模型逻辑保留在模型类中似乎是有意义的。有更好的方法吗?
【问题讨论】:
-
创建一个自定义的 ModelManager 并放入一个单独的文件中。
标签: python django celery django-celery circular-dependency