我在 Python 中使用 Celery 来运行后台任务,但对于是否可以将 Celery 任务定义与任务实现分开的问题,我找不到任何明确的答案?
例如,采取以下非常简单的任务:
@celery_app.task
def add_numbers(num1, num2):
return num1 + num2
Run Code Online (Sandbox Code Playgroud)
定义和实现在同一个文件中,即当调用者导入这个模块来调用时add_numbers,定义和实现都被导入。
在这种情况下,还不错。但是我的任务有点复杂,导入调用者肯定不需要的多个模块和包,我想远离调用者。
那么,Celery 是否提供了一种方法来做到这一点?还是我违反了框架?这甚至是一个问题吗?
我已经看到了这个问题Celery dynamic tasks / hidden Celery implementation behind an interface implementation-behind-an-interface,但它已经两年多了 - 有足够的时间来改变很多。
有一个称为签名的功能,允许在不导入任务的情况下调用任务。您将需要 Celery 应用程序实例可用:
sig = celery_app.signature('myapp.add_numbers', args=(1,2))
sig.delay()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
626 次 |
| 最近记录: |