Mi piacerebbe aggiungere il ritardo di attività arbitrarie utilizzando django-celery
. Attualmente, ho creato una classe simile a quello qui sotto (solo un esempio, le classi attuali hanno più di questo):django-sedano: crea e registra dinamicamente un'attività
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)
Io corro celeryd come segue:
python manage.py celeryd -E -B -lDEBUG
quando provo in esecuzione il mio metodo di ritardo dal di dentro un guscio Django [ad es Delayer().delay(lambda: 1, 1)
], sto ottenendo un errore come questo nel mio uscita 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"
la mia domanda è, è possibile registrare tali dinamicamente creat compiti? In caso contrario, quale altro metodo posso utilizzare per ottenere lo stesso effetto con il sedano?