链接任务或直接调用python函数,哪种解决方案更好?
我正在开发一个管道,我必须按顺序完成几个步骤 我有6项任务,其中1项是可选的。我将这样命名:链接任务或直接调用python函数,哪种解决方案更好?,python,celery,Python,Celery,我正在开发一个管道,我必须按顺序完成几个步骤 我有6项任务,其中1项是可选的。我将这样命名:A、B、C(可选)、D、E、F 任务A的返回将在B中使用(直到结束时也是如此): A-->B-->(检查是否需要转到C,如果不需要直接转到D-->C/D-->E-->F 如果每个任务(函数)都是芹菜任务,或者我应该在python代码中一个接一个地调用它们,比如: #。。。等等 def任务_B(参数): #加工 任务C(已处理的参数来自任务B)等等。 @芹菜应用程序任务 def任务_A(): #加工 任务_
A、B、C(可选)、D、E、F
任务A的返回将在B中使用(直到结束时也是如此):
A-->B-->(检查是否需要转到C,如果不需要直接转到D-->C/D-->E-->F
如果每个任务(函数)都是芹菜任务,或者我应该在python代码中一个接一个地调用它们,比如:
#。。。等等
def任务_B(参数):
#加工
任务C(已处理的参数来自任务B)等等。
@芹菜应用程序任务
def任务_A():
#加工
任务_B(args)
#或
# ... 等等
@芹菜应用程序任务
定义任务(json参数):
返回已处理的参数
@芹菜应用程序任务
def任务_A():
#加工
链(task_B.s(json_args)、task_C.s())、apply_async()等等
我认为一个优点是可以更好地在任务之间进行调试(芹菜任务解决方案),但python直接调用方法肯定更容易
注意:我严格要求按顺序执行这些任务,不需要异步,因为每个函数/任务都取决于以前的返回数据。在大多数情况下(您对自己的任务解释得不够)将所有任务包装在一个任务中获胜,原因如下:
您可以找到一些更适合分离的情况—可能是针对更长的任务、管理任务之间的python依赖关系、并行运行任务(不是您的情况)或更高的编排需求,如apache Airflow。在考虑链之前,我的上一个解决方案是将所有内容包装在一个任务中,然后记录每个任务。我正在运行长时间运行的任务(在最复杂的情况下,可能需要6个小时,主要任务只是在进一步处理之前记录数据流)。我不使用Airflow的原因是因为我需要Django ORM+其他一些软件包,据我所知,Airflow中的解决方法太多,无法使用这些软件包,这就是我选择芹菜的原因。无论如何,谢谢你的投入,我想我会选择单任务解决方案。