Я пытаюсь использовать методы класса как задачи django-celery, отмечая его с помощью декоратора @task. Такая же ситуация описывается здесь , по словам Ананда Джеяхара. Это что-то вроде этого
class A:
@task
def foo(self, bar):
...
def main():
a = A()
...
# what i need
a.foo.delay(bar) # executes as celery task
a.foo(bar) # executes locally
Проблема даже в том, что я использую экземпляр класса, подобный этому a.foo.delay(bar)
, он говорит, что foo
требуется как минимум два аргумента, что означает, что указатель self
отсутствует.
Дополнительная информация:
- Я не могу преобразовать класс в модуль из-за наследования
- Методы сильно зависят от членов класса, поэтому я не могу сделать их статическими
- Класс маркировки как задачи с помощью декоратора @task делает класс задачей сам по себе, и можно было бы выполнить методы из метода
run()
, используя некоторый аргумент в качестве ключа для выбора метода, но это не совсем то, что я хотите. - Создание экземпляра класса и передача его в качестве аргумента
self
для методов изменяет способ, которым я выполняю методы не как celery taks, а как обычные методы (т.е. при тестировании) - Я попытался выяснить, как я могу зарегистрировать задачу динамически, например, из конструктора, но сельдерей разделяет код между рабочими, поэтому почему это кажется невозможным.
Спасибо за вашу помощь!