什么是更好的解决方案,链接任务或直接调用 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 数据。
在大多数情况下(您对自己的解释不够充分)- 将所有内容都包含在一个任务中获胜,一些原因:
- 更少 运行宁开销。
- 无论如何,您可以(并且应该)使用日志记录来跟踪所有内容。
- 使用 python 代码轻松处理复杂的任务依赖链。
- 可选择将此代码迁移到其他编排工具,而无需与 celery 结合。
你会发现一些情况下有更多的分离理由——可能是为了更长的任务,管理任务之间的 python 依赖关系,运行 并行任务(不是你的情况)或更高的编排需求,比如阿帕奇气流。
我正在开发一个管道,我必须按顺序完成几个步骤。
我有 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 数据。
在大多数情况下(您对自己的解释不够充分)- 将所有内容都包含在一个任务中获胜,一些原因:
- 更少 运行宁开销。
- 无论如何,您可以(并且应该)使用日志记录来跟踪所有内容。
- 使用 python 代码轻松处理复杂的任务依赖链。
- 可选择将此代码迁移到其他编排工具,而无需与 celery 结合。
你会发现一些情况下有更多的分离理由——可能是为了更长的任务,管理任务之间的 python 依赖关系,运行 并行任务(不是你的情况)或更高的编排需求,比如阿帕奇气流。