Patterns

class taskflow.flow.Flow(name, retry=None)[source]

基类: object

所有流程实现的基础抽象类。

流程是一种定义任务之间关系的数据结构。您可以将任务和其他流程(作为子流程)添加到流程中,并且流程提供了一种隐式或显式地定义它们如何相互依赖的方式。关系的具体结构由具体实现定义,而此类定义了公共接口并添加了人类可读的(不一定唯一)名称。

注意(harlowja):如果一个流程被放置在另一个流程中作为子流程,这是组合流程的一种期望方式,那么在编译期间,子流程和父流程可能会被扁平化为一个新的流程。

property name

此流程的非唯一名称(人类可读)。

property retry

相关的流程重试控制器。

此重试控制器对象将影响和控制在执行过程中发生故障时,此流程及其包含的组件如何(以及是否)重试。

abstract add(*items)[source]

将给定的项目/项目添加到此流程。

迭代流程子节点之间的依赖关系链接。

迭代 3 元组 (A, B, meta),其中
  • A 是链接开始的子节点(原子或子流程);

  • B 是链接指向的子节点(原子或子流程);可以说 B 依赖于 AB 需要 A

  • meta 是链接元数据,一个字典。

abstract iter_nodes()[source]

迭代流程的节点。

迭代 2 元组 (A, meta),其中
  • A 是当前流程的子节点(原子或子流程);

  • meta 是链接元数据,一个字典。

property provides

流程提供的符号名称集合。

abstract property requires

流程所需的未满足符号名称集合。

线性流程

class taskflow.patterns.linear_flow.Flow(name, retry=None)[source]

基类: Flow

线性流程模式。

一个线性(可能嵌套)的任务/流程流程,可以作为一个单元按顺序应用,并以应用顺序的相反顺序作为单个单元回滚。

add(*items)[source]

将给定的任务/任务/流程/流程添加到此流程。

property requires

流程所需的未满足符号名称集合。

iter_nodes()[source]

迭代流程的节点。

迭代 2 元组 (A, meta),其中
  • A 是当前流程的子节点(原子或子流程);

  • meta 是链接元数据,一个字典。

迭代流程子节点之间的依赖关系链接。

迭代 3 元组 (A, B, meta),其中
  • A 是链接开始的子节点(原子或子流程);

  • B 是链接指向的子节点(原子或子流程);可以说 B 依赖于 AB 需要 A

  • meta 是链接元数据,一个字典。

无序流程

class taskflow.patterns.unordered_flow.Flow(name, retry=None)[source]

基类: Flow

无序流程模式。

一个无序(可能嵌套)的任务/流程流程,可以作为单个单元以任何顺序执行并回滚。

add(*items)[source]

将给定的任务/任务/流程/流程添加到此流程。

迭代流程子节点之间的依赖关系链接。

迭代 3 元组 (A, B, meta),其中
  • A 是链接开始的子节点(原子或子流程);

  • B 是链接指向的子节点(原子或子流程);可以说 B 依赖于 AB 需要 A

  • meta 是链接元数据,一个字典。

iter_nodes()[source]

迭代流程的节点。

迭代 2 元组 (A, meta),其中
  • A 是当前流程的子节点(原子或子流程);

  • meta 是链接元数据,一个字典。

property requires

流程所需的未满足符号名称集合。

图流程

class taskflow.patterns.graph_flow.Flow(name, retry=None)[source]

基类: Flow

图流程模式。

包含的流程/任务将根据它们的依赖关系执行,这些依赖关系将通过使用流程/任务提供的和要求的映射或通过手动创建的依赖关系链接来解析。

根据依赖关系,将构建一个有向图。如果存在边 A -> B,这意味着 B 依赖于 A(并且 B 的执行必须等待 A 完成执行,在回滚时,这意味着 A 的回滚必须等待 B 完成回滚)。

注意:不允许循环依赖关系。

将现有的节点 u 作为现有节点 v 的运行时依赖项进行链接。

请注意,如果添加这些边创建了循环图,则会引发DependencyFailure异常,并且提供的更改将被丢弃。如果正在请求链接的节点不存在于此图中,则会引发ValueError异常。

参数:
  • u – 要创建链接的源任务或流程(必须已经存在)

  • v – 要创建链接的目标任务或流程(必须已经存在)

  • decider – 一个回调函数,它将在运行时决定是否允许执行 v(或者是否应该忽略 v 的执行,因此不执行)。它预计将以单个关键字参数 history 接收,该参数将是所有 u 可决定的链接的执行结果,这些链接以 v 为目标。它预计将返回一个布尔值(True 以允许 v 执行,或 False 以不执行)。

  • decider_depthDepth 枚举(或其字符串版本)之一,它将用于影响当提供的决定的结果为 false 时,将忽略哪些原子。如果未提供(并且提供了一个有效的决定者,则默认值为 ALL)。

add(*nodes, **kwargs)[source]

将给定的任务/任务/流程/流程添加到此流程。

请注意,如果添加这些节点(以及任何边)创建了循环图,则会引发DependencyFailure异常,并且应用的更改将被丢弃。

参数:
  • nodes – 要添加到流程的节点

  • kwargs

    关键字参数,当前处理的两个关键字参数是

    • resolve_requires 一个布尔值,当为 true(默认值)时,意味着当添加节点时,它们的符号要求将与现有的节点匹配,并且将自动创建链接到这些提供者。如果存在多个可能的提供者,则会引发AmbiguousDependency异常,并且提供的添加将被丢弃。

    • resolve_existing,一个布尔值,当为 true(默认值)时,表示在添加新节点时,将扫描现有节点的需求,以查找此新添加的节点可以提供的符号。如果找到匹配项,则会自动从新添加的节点到需求方创建链接。

迭代流程子节点之间的依赖关系链接。

迭代 3 元组 (A, B, meta),其中
  • A 是链接开始的子节点(原子或子流程);

  • B 是链接指向的子节点(原子或子流程);可以说 B 依赖于 AB 需要 A

  • meta 是链接元数据,一个字典。

iter_nodes()[source]

迭代流程的节点。

迭代 2 元组 (A, meta),其中
  • A 是当前流程的子节点(原子或子流程);

  • meta 是链接元数据,一个字典。

property requires

流程所需的未满足符号名称集合。

class taskflow.patterns.graph_flow.TargetedFlow(*args, **kwargs)[source]

基类: Flow

具有目标的图流。

添加了执行流直到某个图节点(任务或子流)的可能性。

set_target(target_node)[source]

设置流的目标。

对于目标节点不需要的任何节点(任务或子流)将不会被执行。

reset_target()[source]

重置流的目标。

流的所有节点都将被执行。

add(*nodes, **kwargs)

将给定的任务/任务/流程/流程添加到此流程。

请注意,如果添加这些节点(以及任何边)创建了循环图,则会引发DependencyFailure异常,并且应用的更改将被丢弃。

参数:
  • nodes – 要添加到流程的节点

  • kwargs

    关键字参数,当前处理的两个关键字参数是

    • resolve_requires 一个布尔值,当为 true(默认值)时,意味着当添加节点时,它们的符号要求将与现有的节点匹配,并且将自动创建链接到这些提供者。如果存在多个可能的提供者,则会引发AmbiguousDependency异常,并且提供的添加将被丢弃。

    • resolve_existing,一个布尔值,当为 true(默认值)时,表示在添加新节点时,将扫描现有节点的需求,以查找此新添加的节点可以提供的符号。如果找到匹配项,则会自动从新添加的节点到需求方创建链接。

将现有的节点 u 作为现有节点 v 的运行时依赖项进行链接。

请注意,如果添加这些边创建了循环图,则会引发DependencyFailure异常,并且提供的更改将被丢弃。如果正在请求链接的节点不存在于此图中,则会引发ValueError异常。

参数:
  • u – 要创建链接的源任务或流程(必须已经存在)

  • v – 要创建链接的目标任务或流程(必须已经存在)

  • decider – 一个回调函数,它将在运行时决定是否允许执行 v(或者是否应该忽略 v 的执行,因此不执行)。它预计将以单个关键字参数 history 接收,该参数将是所有 u 可决定的链接的执行结果,这些链接以 v 为目标。它预计将返回一个布尔值(True 以允许 v 执行,或 False 以不执行)。

  • decider_depthDepth 枚举(或其字符串版本)之一,它将用于影响当提供的决定的结果为 false 时,将忽略哪些原子。如果未提供(并且提供了一个有效的决定者,则默认值为 ALL)。

class taskflow.deciders.Depth(value, names=<not given>, *values, module=None, qualname=None, type=None, start=1, boundary=None)[source]

基类: StrEnum

决策器影响范围的枚举。

ALL = 'ALL'

默认决策器深度,影响所有后续原子(包括位于后续嵌套流中的原子)。

FLOW = 'FLOW'

决策器深度,影响相同流中的所有后续任务(它不会影响后续嵌套流中的任务/重试)。

警告

在使用这种类型时,允许执行已被忽略的事物的后续操作(例如嵌套流及其包含的任务),这可能会导致运行时符号查找错误,用户请注意。

NEIGHBORS = 'NEIGHBORS'

决策器深度,仅影响下一个后续任务(并且不会遍历一个级别的后续任务)。

警告

在使用这种类型时,允许执行已被忽略的事物的后续操作(例如嵌套流及其包含的任务),这可能会导致运行时符号查找错误,用户请注意。

ATOM = 'ATOM'

决策器深度,仅影响目标原子(并且不会遍历到任何级别的后续原子)。

警告

在使用这种类型时,允许执行已被忽略的事物的后续操作(例如嵌套流及其包含的任务),这可能会导致运行时符号查找错误,用户请注意。

classmethod translate(desired_depth)[source]

将字符串转换为深度枚举。

taskflow.deciders.pick_widest(depths)[source]

从多个深度中选择影响范围最广的深度。

层级

Inheritance diagram of taskflow.flow, taskflow.patterns.linear_flow, taskflow.patterns.unordered_flow, taskflow.patterns.graph_flow