我正在尝试使用类的方法作为 django-celery 任务,并使用 @task 装饰器对其进行标记。描述了同样的情况here https://stackoverflow.com/questions/8846489/celery-python-object-methods”,阿南德·杰亚哈尔问道。
是这样的
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
问题是即使我使用这样的类实例a.foo.delay(bar)
它说,那foo
至少需要两个参数,这意味着self
指针未命中。
更多信息:
- 我无法将类转换为module因为继承
- 方法强烈依赖于类成员,所以我无法创建它们static
- Marking class因为带有 @task 装饰器的任务使该类本身成为一个任务,并且可以执行以下方法
run()
方法,使用一些参数作为方法选择的关键,但这并不完全是我想要的。
- 创建类的实例并将其传递为
self
方法的参数改变了我执行方法的方式not与芹菜一样,但与通常的方法一样(即在测试时)
- 我试图找出如何动态注册任务,例如从构造函数,但芹菜在工作人员之间共享代码,所以这就是为什么它似乎是不可能的。
感谢您的帮助!
Celery 从 3.0 版本开始实验性地支持使用方法作为任务。
这方面的文档位于celery.contrib.methods
,并还提到了一些您应该注意的注意事项:
https://docs.celeryproject.org/en/3.1/reference/celery.contrib.methods.html https://docs.celeryproject.org/en/3.1/reference/celery.contrib.methods.html
Be aware: 支持contrib.methods
从芹菜中删除从4.0开始
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)