【问题标题】:How to create a dependency tree for python functions如何为python函数创建依赖树
【发布时间】:2019-08-12 16:54:55
【问题描述】:

我正在使用 python/numpy 编写一些代码,我将使用这些代码对一些实验数据集进行数据分析。这些分析例程的某些步骤可能需要一段时间。每次都重新运行分析的每个步骤(即调试时)是不切实际的,因此将这些步骤的输出保存到文件中并在它们已经可用时重复使用它们是有意义的。

我最终想要获得的数据可以来自此分析过程中的各个步骤。 IE,A可以用来计算B和C。D可以从B计算。E可以用C和D计算等等。

这里的问题是,通过几个(或多个)数据集却发现代码中存在一些需要重新计算树的某些部分的小问题并不少见。 IE - 我在 B 中发现了一个错误,所以现在任何依赖于 B 的东西也需要重新计算,因为它源自不正确的数据。

这里的最终目标是基本上保护自己免受发现错误时忘记重新处理的数据集。换句话说,我想确信我的所有数据都是使用最新代码计算的。

有没有办法在 Python 中实现这一点?只要我添加新步骤时它是可扩展的,我没有这个解决方案需要采用的特定形式。我也同意仅在重新计算依赖数量时执行“重新计算步骤”(而不是在更改父母之一时)。

我首先想到如何做到这一点是在每个保存的文件(A、B、C 等)的标题中嵌入信息,指示每个模块的创建版本。然后,在加载保存的数据时,代码可以检查文件中的版本是否与父模块的当前版本匹配。 (某种parent.getData() 检查数据是否已针对该数据集计算以及是否是最新的)

问题是,至少乍一看,我可以看到,当更改发生在依赖链中的几个步骤时,这可能会出现问题,因为即使 派生文件仍可能与其模块保持同步它的父母已经过时了。我想我可以添加某种parent.checkIfUpToDate() 来检查自己的文件,然后询问每个 its 父母是否是最新的(然后询问他们的父母等)并更新它如果不。版本号可以只是存储在每个模块中的静态字符串。

我对这种方法的担忧是,它可能意味着从磁盘读取潜在的大文件只是为了获取版本号。如果我使用“文件头”方法,当我执行open(myFile) 时,Python 是否真的将整个文件加载到内存中,或者我可以这样做,只需读取标题行,然后关闭文件而不加载整个文件进入记忆?

最后 - 除了让文件的第一行是# MyFile made with MyModule V x.y.z 的一些变体并编写一些代码来解析该行之外,还有嵌入此类信息的好方法吗?

我有点好奇这种方法是否有意义,或者我是否正在重新发明轮子并且已经有一些东西可以做到这一点。

编辑:在我提交此文件后我还想到了其他一些事情——Python 是否有任何机制来定义模块必须遵循的模板?只是为了确保我在模块之间保持数据读取步骤的格式一致。

【问题讨论】:

标签: python dependencies


【解决方案1】:

我无法回答您的所有问题,但您只能从大文件中读取一小部分数据,如下所示:

How to read specific part of large file in Python

我不明白你为什么需要parent.checkIfUpToDate() 函数。您也可以将父函数的版本号也存储在文件本身中。 对我来说,你的方法听起来很合理,但是我从来没有做过类似的事情。或者,您可以创建一个包含指定信息的附加文件,但我认为将信息存储在实际文件中应该可以防止“数据文件”和“功能版本文件”之间的版本错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 2013-03-20
    • 1970-01-01
    • 2011-07-21
    • 2019-01-20
    • 2021-07-17
    • 1970-01-01
    • 2022-08-16
    相关资源
    最近更新 更多