Celery任务的定义和实现可以分开吗?
我在用Python的Celery来处理后台任务,但我找不到一个明确的答案,关于我是否可以把Celery任务的定义和实现分开。
举个简单的例子,看看下面这个任务:
@celery_app.task
def add_numbers(num1, num2):
return num1 + num2
这里的定义和实现都在同一个文件里,也就是说,当调用者导入这个模块来调用 add_numbers
时,定义和实现都会被一起导入。
这样其实还好。但是我的任务要复杂一些,需要导入多个模块和包,而调用者其实并不需要这些内容,我希望能把这些内容隐藏起来。
那么,Celery有没有提供这样的方式呢?还是说我在违背这个框架的设计?这真的是个问题吗?
我看到过这个问题的讨论 Celery动态任务 / 隐藏Celery实现细节,不过那已经是两年多前的事了,时间足够让很多事情发生变化。
1 个回答
4
有一个叫做 签名 的功能,它可以让你在不导入任务的情况下调用这些任务。你需要确保可以使用到 Celery 应用的实例:
sig = celery_app.signature('myapp.add_numbers', args=(1,2))
sig.delay()