我有一个非常基本的脚本,可以在 Wine 下运行多个 Windows 种群遗传学程序 (msvar.exe)。它使用“查找”在多个文件夹中查找启动文件 (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 的更好方法,并且允许我在远程计算机上运行更多模拟。按照 Run wine in parallel with gnu-parallel - needs {%} slot substitution to work 中的建议,我试图让 Gnu 与 wineconsole 并行工作,但没有成功。 .有没有人能提供帮助,或者更好地编写一个我可以使用的脚本。
感谢您的帮助。
最佳答案
我认为你的命令会变得非常长而且笨拙,除非你使用像这样的导出函数:
#!/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
关于parallel-processing - 使用 gnu parallel 在 wine 下运行 windows 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38691023/