并行运行 conda-build 是不是安全?

Posted

技术标签:

【中文标题】并行运行 conda-build 是不是安全?【英文标题】:Is it safe to run conda-build in parallel?并行运行 conda-build 是否安全? 【发布时间】:2021-05-02 19:21:33 【问题描述】:

第一个问题,如果我在这里没有遵守任何既定规范,请对我大喊大叫:)

我第一次设置一个完整的 conda-build 管道,我有一个看起来像这样的 Makefile:

build:
    echo "Building packages."

    conda-build my_first_package/conda-recipe --output-folder /path/to/dev/channel
    conda-build my_second_package/conda-recipe --output-folder /path/to/dev/channel
    conda-build my_third_package/conda-recipe --output-folder /path/to/dev/channel

    conda index /path/to/dev/channel

有问题的三个包彼此紧密相连,并且存储在同一个 repo 中,因此最好在同一个管道中构建每个包。我想做的是为每一个分离一个单独的进程并并行运行每个 conda-build 命令。不确定这是否是一个安全的操作,因为我真的不明白 conda-build 正在做什么来“构建”包。

我将在今天晚些时候测试这个想法并发布更新,但我真正担心的是它会产生一些意想不到的副作用,我不知道如何进行测试。所以我想我的问题是:conda-build 可以将多个包并行构建到同一个 conda 通道中吗?

【问题讨论】:

更新:经过一些广泛的实验,我发现它似乎有效。需要注意的是,如果第二个包依赖于第一个包,那么并行构建它们似乎会导致一些问题,因此最好按顺序运行依赖集。 虽然不典型,但在 Conda Forge 上肯定有具体的例子,其中原料构建多个包。例如,the matplotlib-feedstock 构建 matplotlib-basematplotlibmpl-sample-data 没有意识到他们是这样做的。很酷,一定要仔细看看。谢谢! 【参考方案1】:

或者,对于耦合非常紧密的软件包,您可能希望研究具有多个输出的单个构建。有关参考,请参阅 the Outputs Section documentation 的 conda-build。还可能值得查看一个完整的示例,例如 Conda Forge's matplotlib-feedstock,它构建了 matplotlibmatplotlib-basempl-sample-data,所有这些都来自一个单一的配方。

在这种特殊情况下,我想像

meta.yaml

...
outputs:
  - name: my_first_package
    ...
  - name: my_second_package
    ...
  - name: my_third_package
    ...
...

然后运行一个conda build 命令。

【讨论】:

这似乎更符合 Conda 的预期用途,我将更多地研究这种方法。谢谢!

以上是关于并行运行 conda-build 是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章

“线程安全”函数是不是依赖于并行化框架?

传递一个并行安全的 RNG 来运行

并行流是不是以线程安全的方式处理上游迭代器?

使用 OPTION (MAXDOP 1) 减少 SQL Server 中的并行性是不是安全?

将并行执行策略与 std::back_inserter 一起使用是不是安全?

对于写入固定大小数组的不同部分的并行线程,是不是存在线程安全的 Java 数据结构?