django-celery
を使用して任意のタスクの遅延を追加したいと考えています。現在、私は次のようなクラスを作成している(単なる一例を、実際のクラスはこれ以上のものを持っている):次のようにdjango-celery:動的にタスクを作成して登録する
from celery.task import task
class Delayer(object):
def delay(self, func, minutes):
return task(func, name="%s.delayed"%self.__class__.__name__)\
.apply_async(countdown=minutes*60)
私はcelerydを実行しているよ:
python manage.py celeryd -E -B -lDEBUG
私がしようとするとDjangoのシェル内から私の遅延方法を実行している[例えばDelayer().delay(lambda: 1, 1)
]、私は私のceleryd出力にこのようなエラーを取得しています:
[2013-01-02 15:26:39,324: ERROR/MainProcess] Received unregistered task of type "Delayer.delayed".
The message has been ignored and discarded.
Did you remember to import the module containing this task?
Or maybe you are using relative imports?
Please see http://bit.ly/gLye1c for more information.
The full contents of the message body was:
{'retries': 0, 'task': "Delayer.delayed", 'eta': '2013-01-02T21:27:39.320913', 'args': [], 'expires': None, 'callbacks': None, 'errbacks': None, 'kwargs': {}, 'id': '99d49fa7-bd4b-40b0-80dc-57309a6f19b1', 'utc': True} (229b)
Traceback (most recent call last):
File "/home/simon/websites/envs/delayer/local/lib/python2.7/site-packages/celery/worker/consumer.py", line 432, in on_task_received
strategies[name](message, body, message.ack_log_error)
KeyError: "Delayer.delayed"
私の質問は、そのような動的creatの登録が可能ですエドタスク?そうでない場合は、セロリを使用して同じ効果を達成するために他にどのような方法を使用できますか?