#!/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.00?file.smt2是个大文件,执行时间不可能是0.00。
1条答案
按热度按时间iq0todco1#
并行地向同一个文件追加数据是一个坏主意,你会发现到处都是竞态条件。
您可以使用
results.csv
和file.smt2
来执行此操作。因此,如果您在
doone
中写入文件,请确保它具有唯一的名称(例如使用myfile.$$
)。要查看竞争条件是否是您的问题,您可以让GNU Parallel每次运行一个作业:
parallel --jobs 1
。如果问题就此消失,那么你可能会逃脱:
字符串
如果
results.csv
只是一个日志文件,请考虑使用parallel --joblog my.log
。