2014-10-18 83 views
4

我在Python中使用Celery运行后台任务,并找不到任何明确的答案来解决我是否可以从任务实现中分离Celery任务定义的问题。Celery任务的定义和实现是否可以拆分?

例如,采取下面的非常简单的任务:

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

定义和实现都在同一个文件,即当呼叫者进口该模块调用add_numbers,无论是定义和实施都是进口的。

在这种情况下,不是那么糟糕。但是我的任务稍微复杂一些,导入了调用者不需要的多个模块和包,我想避开调用者。

那么,芹菜是否提供了一种方法来做到这一点?还是我违背框架?这是一个问题吗?

我看到这个问题Celery dynamic tasks/hiding Celery implementation behind an interface 实现后面的界面,但它已经超过两年了 - 足够多的时间用于改变。

回答

2

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

sig = celery_app.signature('myapp.add_numbers', args=(1,2)) 
sig.delay() 
相关问题