相关疑难解决方法(0)

在芹菜的@task装饰员之后的装饰员

我正试图在芹菜@task装饰器之后应用装饰器,类似于.

@send_email
@task
def any_function():

   print "inside the function"
Run Code Online (Sandbox Code Playgroud)

我可以按照文档中推荐的方式工作,即将装饰器放在任务装饰器之前,但在这种情况下我想访问装饰器中的任务实例.

@send_email必须是一个类装饰器,这是我试过没有成功的:

class send_email(object):
    ''' wraps a Task celery class '''
    def __init__(self, obj):

        self.wrapped_obj = obj

        functools.update_wrapper(self, obj)

    def __call__(self, *args, **kwargs):

        print "call"

        return self.wrapped_obj.__call__(*args, **kwargs)

    def run(self, *args, **kwargs):

        print "run"

        return self.wrapped_obj.__call__(*args, **kwargs)

    def __getattr__(self, attr):

        if attr in self.__dict__:

            return getattr(self, attr)

        return getattr(self.wrapped_obj, attr)
Run Code Online (Sandbox Code Playgroud)

我永远无法在调用或运行函数函数中获取print语句以显示在worker或调用者中.

我们如何装饰芹菜任务,而不依赖于基于类的任务定义(因此装饰器将位于函数定义之上的@task之上).

谢谢你的帮助!

米格尔

python decorator celery django-celery

7
推荐指数
2
解决办法
6054
查看次数

如何在Python Flask中保留芹菜任务中的请求上下文?

有没有办法将请求复制到Flask中的芹菜任务,使得任务在启动任务的请求上下文中执行?
我需要在芹菜任务中访问烧瓶安全当前用户,但由于任务在请求上下文之外,我不能这样做.我需要来自请求的其他信息,因此只需将当前用户转发到任务就行了.

我的任务确实插入了数据库.它需要当前用户保存创建行的用户的id.将用户对象传递给任务可以解决问题.但是,应用程序逻辑是这样的,每次插入/删除/更新都会在flush事件之前记录,它会记录执行修改的用户,他的IP,原始url,它插入的数据......)

日志事件就像我在刷新之前说的那样完成,并且它在99%的场景中工作.但是当我有一个冗长的任务我想成为芹菜任务时,请求数据不可用,当前用户也不可用(因为它在原始请求上下文之外)

python celery flask

6
推荐指数
1
解决办法
912
查看次数

标签 统计

celery ×2

python ×2

decorator ×1

django-celery ×1

flask ×1