Celery任务的定义和实现可以分开吗?

8 投票
1 回答
926 浏览
提问于 2025-04-28 06:51

我在用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()

撰写回答