Это действительно плохая идея, чтобы добавить к одному и тому же файлу параллельно. У вас будут гоночные условия повсюду.
Вы делаете это с results.csv
и file.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.smt2
и optimathsat
, не предоставляя их, поэтому мы не можем запустить ваш пример.