相关疑难解决方法(0)

使用类方法作为芹菜任务

我正在尝试使用class的方法作为django-celery任务,使用@task装饰器进行标记.Anand Jeyahar问道,这里也描述同样的情况.就是这样的

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
Run Code Online (Sandbox Code Playgroud)

问题是,即使我使用这样的类实例a.foo.delay(bar),它foo至少需要两个参数,这些self指针错过了指针.

更多信息:

  • 由于继承,我无法将类转换为模块
  • 方法强烈依赖于类成员,所以我不能使它们成为静态的
  • 标记与@task装饰任务,使一类任务本身,它可能是可以从执行该方法的run()方法,利用一些参数作为方法选择的关键,但它不正是我想要的.
  • 创建类的实例并将其作为self参数传递给方法会改变我执行方法的方式,而不是像celery taks那样,而是像通常的方法一样(即测试时)
  • 我试图找出如何在构造函数中以dinamically方式注册任务,但芹菜在工作者之间共享代码,这就是为什么它似乎是不可能的.

谢谢你的帮助!

python django-celery

42
推荐指数
3
解决办法
3万
查看次数

标签 统计

django-celery ×1

python ×1