0ralo
@0ralo
Python backend developer

Как в Celery работает delay?

Здравствуйте, решил короче изучить целери и сразу увидел интересную особенность, которую не понимаю.
import celery

app = celery.Celery()


@app.tasks
def a(b: int):
	return 1234


a.delay()

а - просто функция, откуда у нее появился метод delay()? Понятно что в декораторе происходит какая то магия. В исходниках очень сложно, не смог разобраться где именно происходит чудо. Самостоятельные попытки к успеху не привели, может кто подскажет как такое работает?
Попытка

class FunctionClass:
    def __init__(self, func=None):
        self.func = func

    def __call__(self, *args, **kwargs):
        return self.func(*args, **kwargs)

    def delay(self):
        return 1


def funcToClass(func):
    def wrap(*args, **kwargs):
        global func
        temp = func
        func = FunctionClass(temp)
        func.secret = "CAT"
        return func(*args, **kwargs)
    return wrap


@funcToClass
def test(a: int):
    return a + 1


print(test.delay()) - тут всё равно ошибка

  • Вопрос задан
  • 775 просмотров
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы