2013-06-21 2 views
6

у меня есть класс с методами украсить сельдерея @task, как это:сельдерея @task не работает с методами экземпляра

class Port(object): 

    """docstring for Port""" 


    def __init__(self,): 
     print 'Class has been initialized ...' 


    @celery.task(filter=task_method,name="Port.process")  
    def process(self,): 
     print "I'm inside the process task method: " 

Вызывается здесь:

p = Port() 

p.process.apply_async() 

Я также попытался: p.process.delay(), с тем же результатом ниже.

Когда я бегу, я получаю эту ошибку:

[2013-06-22 02:32:53,988: ERROR/MainProcess] Task Port.process[77cff07e-4bc5-4e36-9c4e-b68d7616c74e] raised exception: TypeError('process() takes at least 1 argument (0 given)',) Traceback (most recent call last): File "/usr/local/lib/python2.7/site-packages/celery/task/trace.py", line 228, in trace_task R = retval = fun(*args, **kwargs) File "/usr/local/lib/python2.7/site-packages/celery/task/trace.py", line 415, in __protected_call__ return self.run(*args, **kwargs) TypeError: process() takes at least 1 argument (0 given)

Это важная часть, TypeError: process() takes at least 1 argument (0 given).

Теперь, как я могу решить это?

Некоторые люди говорят, что это происходит потому, что сельдерей использует задачу метода, несвязанную с инициализированным объектом, а некоторые говорят, что это просто работает, я что-то пропустил?

+0

Если на «методы класса» вы имеете в виду обычные методы экземпляра (как следует из вашего примера), это, вероятно, дубликат [использование методов класса в качестве задач сельдерея] (http://stackoverflow.com/questions/9250317/using-class-methods-as-celery-tasks). Если вы уже знали об этом, но вы на самом деле говорите о '@ classmethod's здесь, пожалуйста, проясните и дайте подходящий пример. – abarnert

+0

Что касается вашего вопроса ... Да, я имею в виду методы экземпляров. Что касается ссылки, которую вы предоставили, я уже следил за ней, теперь я получаю вышеуказанную ошибку ... – securecurve

ответ

3

Сельдерей имеет экспериментальную поддержку для использования методов в качестве задач с версии 3.0.

документация для этого в celery.contrib.methods, а также упоминает некоторые предостережения вы должны знать:

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

Используется this в качестве ссылки

+3

Это, кажется, недавно было удалено, поскольку оно было слишком ошибкой - https://github.com/celery/celery/commit/4f43276c236bbef7239a49b93815f478aec1d9f6 – Hamy

+0

@Hamy, Спасибо за указатель :) .. Очень ценим! – securecurve

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