我在Python中使用Celery来运行后台任务,但对于是否可以将Celery任务定义与任务实现分离的问题,我找不到任何明确的答案?
例如,以下面非常简单的任务为例:
@celery_app.task
def add_numbers(num1, num2):
return num1 + num2
定义和实现在同一个文件中,即当调用者导入此模块以调用add_numbers
时,定义和实现都被导入。
在这种情况下,还不错。但我的任务有点复杂,要导入调用方当然不需要的多个模块和包,我想把它们排除在调用方之外。
那么,芹菜提供了一种方法来做到这一点吗?还是我反对这个框架?这是个问题吗?
我看到了这个问题Celery动态任务/在接口后面隐藏Celery实现接口背后的实现,但它已经有两年多的历史了——足够多的时间进行很多更改。
有一个名为签名的功能,它允许在不导入任务的情况下调用任务。您将需要Celery应用程序实例可用:
sig = celery_app.signature('myapp.add_numbers', args=(1,2))
sig.delay()