【问题标题】:parallel execution with a fixed order以固定顺序并行执行
【发布时间】:2019-04-04 13:44:05
【问题描述】:
#!/bin/bash
doone() {
    tracelength="$1"
    short="$2"
    long="$3"
    ratio="$4"
    echo "$tracelength $short $long $ratio" >> results.csv
    python3 main.py "$tracelength" "$short" "$long" "$ratio" >> file.smt2
    gtime -f "%U" /Users/Desktop/optimathsat-1.5.1-macos-64-bit/bin/optimathsat < file.smt2
}
export -f doone
step=0.1
parallel doone \
         ::: 200 300 \
         :::: <(seq 0 $step 0.2) \
         ::::+ <(seq 1 -$step 0.8) \
         :::: <(seq 0 $step 0.1) \
         ::: {1..2} &> results.csv

我需要将 results.csv 中给出的数据整理好。每个作业都会打印其输入,即开头提到的 3 个变量:$tracelength$short$long$ratio ,然后是该作业的相关执行时间;都在一条线上。到目前为止,我的结果如下所示:

0.00
0.00
0.00
0.00
200 0 1 0
200 0 1 0.1
200 0.1 0.9 0

如何修改订单?为什么执行时间总是0.00file.smt2是个大文件,执行时间绝对不可能0.00

【问题讨论】:

    标签: macos shell time gnu-parallel optimathsat


    【解决方案1】:

    并行追加到同一个文件确实是个坏主意。您将到处都有竞争条件。

    您同时使用 results.csvfile.smt2

    因此,如果您写入 doone 中的文件,请确保它具有唯一的名称(例如,使用 myfile.$$)。

    要查看竞争条件是否是您的问题,您可以让 GNU Parallel 一次运行一项作业:parallel --jobs 1

    如果问题就这样消失了,那么你可能会逃脱:

    doone() {
        tracelength="$1"
        short="$2"
        long="$3"
        ratio="$4"
        # No >> is needed here, as all output is sent to results.csv
        echo "$tracelength $short $long $ratio"
        tmpfile=file.smt.$$
        cp file.smt2 $tmpfile
        python3 main.py "$tracelength" "$short" "$long" "$ratio" >> $tmpfile
        # Be aware that the output from gtime and optimathsat will be put into results.csv - making results.csv not a CSV-file
        gtime -f "%U" /Users/Desktop/optimathsat-1.5.1-macos-64-bit/bin/optimathsat < $tmpfile
        rm $tmpfile
    }
    

    如果results.csv 只是一个日志文件,请考虑改用parallel --joblog my.log

    如果问题没有因此而消失,那么您的问题就在其他地方。在这种情况下,制作一个 MCVE (https://stackoverflow.com/help/mcve):您的示例不完整,因为您在没有提供 file.smt2optimathsat 的情况下引用了它们,因此我们无法运行您的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-28
      • 1970-01-01
      • 2020-06-05
      • 1970-01-01
      • 1970-01-01
      • 2017-08-23
      • 1970-01-01
      相关资源
      最近更新 更多