これはここからのフォローアップクエストです。
Django 1.3.1、セロリ2.2.7、python2.6。
私は次のものを持っていますfruits/models.py
:
モデルを考えてみましょう。
class Fruit(models.Model):
name = models.CharField(max_length=50)
def __unicode__(self):
return self.name
そして、次のfruits/tasks.py
:
from django.dispatch import receiver
from django.db.models import signals
from celery.task import periodic_task, task
import fruits.models as m
import time
@task()
def check_fruit(id):
time.sleep(2)
try:
fruit = m.Fruit.objects.get(pk=id)
print "Fruit %s is found!" % fruit.name
except m.Fruit.DoesNotExist:
print "no such fruit"
@receiver(signals.pre_save, sender=m.Fruit, dispatch_uid="on_fruit_save")
def on_custom_feed_save(sender, instance, **kwargs):
check_fruit.apply_async(args=[instance.id])
セロリデーモンを起動し、djangoシェルを開いて次のように入力します。
import fruits.tasks;
import fruits.models as m;
m.Fruit(name="plum").save()
質問:私はその仕事が実を結ぶことを期待しますが、決してそうはなりません。なんで?
(大規模なシステムで発生する問題をシミュレートするために、意図的に事前保存信号からタスクを起動しています)。