Model.execute_actions#

Model.execute_actions(actions)[源代码]#

执行内存优化运行

执行内存优化运行。 内存优化运行旨在通过减少内存消耗来计算指定的节点(目标)。 当中间结果包含大量数据时,内存优化运行非常有用。

内存优化运行实际上包含两次运行。 第一次运行通过调用 generate_actions()触发, 第二次运行通过调用execute_actions()执行。 generate_actions()方法运行模型, 根据传入targets参数的目标列表生成并返回一个动作列表。 用户在调用generate_actions()前, 应在模型中设置一个小型数据集。 targets的元素应为 ItemNode对象, 表示Cells对象及其参数的组合。 可以通过向node()方法传递参数来创建节点对象。 例如,以下表达式创建了表示Model1.Space1.Cells3(x=2)的节点对象:

Model1.Space1.Cells3.node(x=2)

generate_actions() 运行模型来分析目标节点的依赖关系。 generate_actions() 会识别目标节点依赖的所有计算节点, 并按拓扑顺序对这些节点进行排序。 然后将排序后的节点分组,确保每组最多包含 step_size(默认值为1000)指定的节点数量。 接着 generate_actions() 会生成操作 来处理每个分组。 对于每个分组,会按顺序生成calc(计算)、paste(粘贴)和clear(清除)操作。 每个操作都与它适用的节点相关联。 calc操作表示其关联的节点 应该被计算。 paste操作表示其关联的节点应该进行值粘贴, 以便在这些节点的前驱节点被清除后,它们的值仍然保留。 clear操作表示其关联的节点应该被清除 以节省内存。

generate_actions() 返回一个动作列表。每个动作也由一个列表表示,其第一个元素是一个字符串,可以是 'calc''paste''clear'。该字符串表示要执行的动作类型。第二个元素是 ItemNode 的列表,第一个元素指示的动作将应用于这些节点。下面是一个动作列表的示例。

[
    ['calc', [Model1.Space1.Cells1(), Model1.Space1.Cells2(x=0)]],
    ['paste', [Model1.Space1.Cells2(x=0), Model1.Space1.Cells1()]],
    ['clear', []],
    ['calc', [Model1.Space1.Cells2(x=1), Model1.Space1.Cells2(x=2)]],
    ['paste', [Model1.Space1.Cells2(x=2)]],
    ['clear', [Model1.Space1.Cells2(x=1), Model1.Space1.Cells2(x=0)]],
    ['calc', [Model1.Space1.Cells3(x=2)]],
    ['paste', [Model1.Space1.Cells3(x=2)]],
    ['clear', [Model1.Space1.Cells1(), Model1.Space1.Cells2(x=2)]]
]

execute_actions() 执行传入的actions动作。 在调用execute_actions()之前,用户应当 设置完整的数据集而非用于生成动作的小数据集。 执行完成后,目标节点会被值粘贴, 且目标节点所有前置节点的值都会被清除。 如需清除值,可对目标调用clear_at() 或调用Cells.clear_allSpace.clear_allModel.clear_all

Parameters:

actions (list) – actions 列表

另请参阅