什么是更好的解决方案,链接任务或直接调用 python 函数?

What would be a better solution, chained tasks or directly calling python functions?

我正在开发一个管道,我必须按顺序完成几个步骤。

我有 6 个任务,其中 1 个是可选的。我会这样命名它们:A, B, C(optional), D, E, F

任务A的return会在B中使用(一直到最后):

A-->B-->(check if it needs to go to C if not goes directly to D)-->C/D-->E-->F

什么是更好的解决方案,如果任务(函数)是一个芹菜任务,或者我应该在我的 python 代码中一个接一个地调用它们,例如:

# ... and so on with the tasks

def task_B(args):
    # processing
    task_C(processed_args_from_task_B) # and so on.

@celery_app.task
def task_A():
    # processing
    task_B(args)


# OR 
# ... and so on with the tasks

@celery_app.task
def task_B(json_args):
    return processed_json_args
    

@celery_app.task
def task_A():
    # processing
    chain(task_B.s(json_args), task_C.s()).apply_async() # and so on

我认为一个优点是更好地从一个任务调试到另一个任务(芹菜任务解决方案),但 python 直接调用方法肯定更容易。

注意:我严格按顺序需要这些任务,不需要异步,因为每个 function/task 都取决于以前的 return 数据。

在大多数情况下(您对自己的解释不够充分)- 将所有内容都包含在一个任务中获胜,一些原因:

  1. 更少 运行宁开销。
  2. 无论如何,您可以(并且应该)使用日志记录来跟踪所有内容。
  3. 使用 python 代码轻松处理复杂的任务依赖链。
  4. 可选择将此代码迁移到其他编排工具,而无需与 celery 结合。

你会发现一些情况下有更多的分离理由——可能是为了更长的任务,管理任务之间的 python 依赖关系,运行 并行任务(不是你的情况)或更高的编排需求,比如阿帕奇气流。