を使用して任意のタスクの遅延を追加したいと思い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シェル[eg Delayer().delay(lambda: 1, 1)
]内からdelayメソッドを実行しようとすると、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"
私の質問は、そのような動的に作成されたタスクを登録することは可能ですか?そうでない場合、セロリを使用して同じ効果を達成するために他にどのような方法を使用できますか?