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

时间:2014-10-18 15:12:39

标签: python celery

我在Python中使用Celery来运行后台任务,并且无法找到关于我是否可以将Celery任务定义从任务实现中分离的问题的任何明确答案?

例如,请执行以下非常简单的任务:

@celery_app.task
def add_numbers(num1, num2):
    return num1 + num2

定义和实现在同一个文件中,即当调用者导入此模块以调用add_numbers时,将导入定义和实现。

在这种情况下,不是那么糟糕。但是我的任务有点复杂,导入了调用者当然不需要的多个模块和软件包,而且我想要远离调用者。

那么,Celery是否提供了这样做的方法?或者我反对框架?这甚至是个问题吗?

我见过这个问题Celery dynamic tasks / hiding Celery implementation behind an interface 实施背后的界面,但它已经超过两年了 - 足够的时间可以改变很多。

1 个答案:

答案 0 :(得分:2)

有一个名为signatures的功能,可以在不导入任务的情况下调用任务。您需要Celery应用程序实例可用:

sig = celery_app.signature('myapp.add_numbers', args=(1,2))
sig.delay()