使用gnu parallel在wine下运行windows程序

时间:2016-08-01 04:25:52

标签: parallel-processing gnu bioinformatics wine

我有一个非常基本的脚本来运行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并行工作失败了。是否有人能够帮助,甚至更好地敲击我可以使用的脚本。

感谢您的帮助。

2 个答案:

答案 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"