2013-12-16 2 views
1

Я пытаюсь повторить задачу, которая не со следующим кодом:Сельдерей - задача повторить вызывает странные ошибки

@task(bind=True) 
def update_listing(self, listing_object, retailer): 
    try: 
     listing = _update_listing(listing_object, retailer) 
    except Exception as exc: 
     raise self.retry(exc=exc) 
    return listing 

Это вызывает следующее сообщение об ошибке будет брошено:

Reject: (TypeError('__init__() takes exactly 2 arguments (3 given)',), True) 

я могу с чем связана эта ошибка, или как я могу ее исправить. Я правильно вызываю метод повтора?

Моего файл сельдерей конфигурация выглядит так:

BROKER_URL = "redis://localhost:6379/0" 
CELERY_IMPORTS = ("tasks",) 
CELERY_RESULT_BACKEND = "redis://localhost:6379/0" 
CELERY_IGNORE_RESULT = True 

Edit: Полные трассировки стеки:

Traceback (most recent call last): 
    File "/home/my-project/venv/local/lib/python2.7/site-packages/celery/app/trace.py", line 218, in trace_task 
    R = retval = fun(*args, **kwargs) 
    File "/home/my-project/venv/local/lib/python2.7/site-packages/celery/app/trace.py", line 398, in __protected_call__ 
    return self.run(*args, **kwargs) 
    File "/home/my-project/tasks.py", line 156, in update_listing 
    raise self.retry(exc=exc) 
    File "/home/my-project/venv/local/lib/python2.7/site-packages/celery/app/task.py", line 666, in retry 
    raise Reject(exc, requeue=True) 
Reject: (TypeError('__init__() takes exactly 2 arguments (3 given)',), True) 

ответ

1

Вы не можете декорировать методы экземпляра с помощью @task декоратора, используемые с регулярным functios.You будет необходимо использовать

from celery.contrib.methods import task

вместо обычного одного:

from celery import task

Это может иметь некоторые оговорки, как это экспериментальная, начиная с версии 3.0, пожалуйста, обратитесь к этой ссылке:

http://docs.celeryproject.org/en/latest/reference/celery.contrib.methods.html

+0

Я попытался с помощью «приложения вместо синтаксиса, но я все еще испытываю одну и ту же проблему :( – Hanpan

+0

Какой синтаксис приложения .. Я не понимаю ... Я использую 'from celery.contrib.methods import task' вместо' из задачи импорта сельдерея', или использовать обычные функции вместо методов внутри классов. – securecurve

Смежные вопросы