我有一个非常基本的脚本来运行Wine下的windows群体遗传程序(msvar.exe)的多个副本。它使用" find"查看多个文件夹以查找启动文件(INTFILE),然后使用该启动文件在每个目录中启动msvar.exe实例。不同的文件夹在启动文件中会有不同的参数,因此我可以通过添加"&"来运行一系列模拟。参数。这是;
for i in $(find /home/msvartest -name INTFILE -type f)
do (
cd $(dirname $(realpath $i));
# wine explorer /desktop=name msvar.exe;
wineconsole --backend=user msvar.exe;
) &
done
目前,我在我的双六声道机器上同时运行了20份msvar.exe,每个副本都有自己的wineconsole(或wine explorer窗口)。每个运行实例可能需要3或4天,但程序只能在单个核心上运行,因此我需要并行运行模拟。看起来Gnu parallel是运行msvar.exe的更好方法,并允许我在远程计算机上运行更多模拟。根据{{3}}中的建议,我试图让Gnu与wineconsole并行工作失败了。是否有人能够帮助,甚至更好地敲击我可以使用的脚本。
感谢您的帮助。
答案 0 :(得分:2)
我认为除非你使用这样的导出函数,否则你的命令会变得非常冗长和笨拙:
#!/bin/bash
doit() {
...
...
}
export -f doit
parallel -j 10 doit ::: {0..99}
所以,对于你的例子看起来像(未经测试):
#!/bin/bash
doit() {
echo Processing $1
cd $(dirname $(realpath "$1"));
WINEPREFIX=$HOME/slot{%} wineconsole --backend=user msvar.exe
}
export -f doit
find /home/msvartest -name INTFILE -type f | parallel --dry-run doit
不幸的是,我没有设置你的环境来测试它,但如果有轻微的错误,它应该很接近并且很容易纠正。试着看看它做了什么,然后移除--dry-run
让它真正做点什么。
如果您的文件名中有空格,则应使用-print0
find
命令,并在-0
之后添加parallel
,但这只是目前的复杂问题。
答案 1 :(得分:1)
xmlns:controls="clr-namespace:XLabs.Forms.Controls;assembly=XLabs.Forms"