【问题标题】:Parallel Tasking Concurrency with Dependencies on Python like GNU Make依赖于 Python 的并行任务并发,如 GNU Make
【发布时间】:2022-05-10 20:33:35
【问题描述】:

我正在寻找一种方法,或者可能是一种哲学方法,以了解如何在 python 中执行 GNU Make 之类的操作。目前,我们使用 makefile 来执行处理,因为 makefile 非常擅长并行运行,只需更改单个选项:-j x。此外,gnu make 已经内置了依赖堆栈,因此添加辅助处理器或处理更多线程的能力仅意味着更新该单个选项。我希望在 python 中具有同样的功能和灵活性,但我没有看到。

举个例子:

all:  dependency_a dependency_b dependency_c

dependency_a:  dependency_d
    stuff

dependency_b:  dependency_d
    stuff

dependency_c:  dependency_e
    stuff

dependency_d:  dependency_f
    stuff

dependency_e:
    stuff

dependency_f:
    stuff

如果我们做一个标准的单线程操作(-j 1),那么操作的顺序可能是:

dependency_f -> dependency_d -> dependency_a -> dependency_b -> dependency_e \
             -> dependency_c

对于两个线程(-j 2),我们可能会看到:

1: dependency_f -> dependency_d -> dependency_a -> dependency_b

2: dependency_e -> dependency_c

是否有人对已构建的软件包或方法有任何建议?我完全开放,只要它是一个 pythonic 解决方案/方法。

请提前致谢!

【问题讨论】:

  • 2022,还有一些还在寻找这个

标签: python concurrency dependencies makefile parallel-processing


【解决方案1】:

您可能想看看jug。这是一个基于任务的并行化框架,包括依赖跟踪。

【讨论】:

    【解决方案2】:

    也可以看看Waf,它没有Scons那么复杂。

    Waf 是一个基于 Python 的框架,用于 配置、编译和安装 应用程序。这里也许是 Waf 最重要的特点:

    自动构建顺序:构建顺序 根据输入和输出计算 文件等 自动 依赖项:要执行的任务是 通过散列文件和命令检测 性能:任务在 自动并行灵活性: 可以很容易地添加新命令 通过子类化特征:支持 对于许多编程语言和 默认情况下包含编译器 文档:应用程序是 基于一个健壮的模型记录在 Waf 书和 API 文档 Python 支持:从 Python 2.4 到 3.2 (Jython 2.5 和 PyPy 也是 支持)

    (来自网站)

    【讨论】:

      【解决方案3】:

      你应该使用Scons,因为它已经完成了你想要的计算,你可以颠覆它来做任何事情(比如Make)。

      【讨论】:

        【解决方案4】:

        看看Scons。它是用 Python 编写的 GNU Make 的替代品。

        SCons 是一种软件结构 工具——也就是说,一种优越的替代品 到经典的“Make”构建工具 我们都知道和喜爱。

        SCons 是作为 Python 实现的 脚本和模块集,以及 SCons “配置文件”实际上是 作为 Python 脚本执行。这给 SCons 许多强大的功能没有 可以在其他软件构建工具中找到。

        【讨论】:

          【解决方案5】:

          redo -j

          “比 make 更小、更简单、更强大、更可靠。djb's redo 的 Python 实现。

          【讨论】:

          • 遗憾的是,该项目在 2019 年停止维护,并且问题跟踪器被禁用。
          • @sorin 据我了解,有 redo-rs 声称功能奇偶校验。我有一段时间没有使用该项目了(fabric 更适合我的项目杂务/CI/CD 任务)
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-05-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多