Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
链接任务或直接调用python函数,哪种解决方案更好?_Python_Celery - Fatal编程技术网

链接任务或直接调用python函数,哪种解决方案更好?

链接任务或直接调用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(): #加工 任务_

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

我有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():
#加工
任务_B(args)
#或
# ... 等等
@芹菜应用程序任务
定义任务(json参数):
返回已处理的参数
@芹菜应用程序任务
def任务_A():
#加工
链(task_B.s(json_args)、task_C.s())、apply_async()等等
我认为一个优点是可以更好地在任务之间进行调试(芹菜任务解决方案),但python直接调用方法肯定更容易

注意:我严格要求按顺序执行这些任务,不需要异步,因为每个函数/任务都取决于以前的返回数据。

在大多数情况下(您对自己的任务解释得不够)将所有任务包装在一个任务中获胜,原因如下:

  • 减少运行开销
  • 无论如何,您可以(也应该)通过日志记录跟踪所有内容
  • 使用python代码轻松处理复杂的任务依赖链
  • 可以选择将此代码迁移到其他编排工具,而不必使用芹菜

  • 您可以找到一些更适合分离的情况—可能是针对更长的任务、管理任务之间的python依赖关系、并行运行任务(不是您的情况)或更高的编排需求,如apache Airflow。

    在考虑链之前,我的上一个解决方案是将所有内容包装在一个任务中,然后记录每个任务。我正在运行长时间运行的任务(在最复杂的情况下,可能需要6个小时,主要任务只是在进一步处理之前记录数据流)。我不使用Airflow的原因是因为我需要Django ORM+其他一些软件包,据我所知,Airflow中的解决方法太多,无法使用这些软件包,这就是我选择芹菜的原因。无论如何,谢谢你的投入,我想我会选择单任务解决方案。