芹菜任务函数自定义属性



我有一个芹菜任务函数,看起来像这样-

@task(base=MyBaseTask)
@my_custom_decorator 
def my_task(*args, **kwargs):
    my_task.ltc.some_func() #fails - attribute ltc doesn't exist on the object

和my_custom_decorator看起来像这样

def my_custom_decorator (f):
    from functools import wraps
    ltc = SomeClass()
    @wraps(f)
    def _inner(*args, **kwargs):
        ret_obj = None
        try:
            f.task_cache = ltc
            ret_obj = f(*args, **kwargs)
        except Exception, e:
            raise
        return ret_obj
    _inner.ltc = ltc
    return _inner

我看到这是因为实际调用来执行任务的可调用对象是一个类型为芹菜任务类的对象。我如何在这个对象上保留我的属性"ltc",以便它可以从任务内部访问,如上面所示,即- my_task.ltc.some_func() ?

谢谢,

我认为一个简单的方法是将ltc作为关键字参数引入…

@task(base=MyBaseTask)
@my_custom_decorator 
def my_task(*args, **kwargs):
    ltc = kwargs['ltc']
    ltc.some_func()

可以这样写:

def my_custom_decorator (f):
    from functools import wraps
    ltc = SomeClass()
    @wraps(f)
    def _inner(*args, **kwargs):
        ret_obj = None
        try:
            f.task_cache = ltc
            kwargs['ltc'] = ltc
            ret_obj = f(*args, **kwargs)
        except Exception, e:
            raise
        return ret_obj
    _inner.ltc = ltc
    return _inner

我不知道是否有芹菜的任务方式来做这件事。

最新更新