Связанная задача в сельдерее не может получить доступ к переменной экземпляра в проекте django - PullRequest
0 голосов
/ 13 декабря 2018

У меня настроен сельдерей в моем проекте django с использованием официальной документации на http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html#using-celery-with-django

Так что мои MyApp/tasks.py имеют содержимое

from celery import shared_task

class Someclass():
    def __init__(self, x, y):
        self.x = x
        self.y = y

    @shared_task(bind=True) 
    def func1(self):
        '''This does not work'''
        return self.x + self.y


    @shared_task(bind=True)
    def func2(self, a, b):
        '''This works well'''
        return a + b

Когда я запускаю

In [9]: o = Someclass(3, 4)    
In [10]: o.func1.delay()
Out[10]: <AsyncResult: afc6b151-d71c-4f46-a916-6917f98c681f>

Я получаю ошибку

AttributeError: 'func1' object has no attribute 'x'

Когда я запускаю

In [11]: o.func2.delay(3, 4)
Out[11]: <AsyncResult: 3b227f00-8d9c-472b-b7d8-8b4b6261f689>

Это прекрасно работает

Как я могу заставить func1 работать так, чтобы этоможно использовать переменные экземпляра, например x и y?

1 Ответ

0 голосов
/ 13 декабря 2018
from celery import shared_task

@shared_task(bind=True)
def func(self, a, b):
    return a + b


class Someclass():
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def func1(self):
        return func.delay(self.x, self.y)
...