Parallel processing 使用gnu并行在wine下运行windows程序

Parallel processing 使用gnu并行在wine下运行windows程序,parallel-processing,gnu,bioinformatics,wine,Parallel Processing,Gnu,Bioinformatics,Wine,我有一个非常基本的脚本,可以在Wine下运行windows群体遗传学程序(msvar.exe)的多个副本。它使用“查找”在多个文件夹中查找启动文件(INTFILE),然后使用该启动文件在每个目录中启动msvar.exe实例。不同的文件夹在初始化文件中将有不同的参数,因此我可以通过添加“&”参数来运行一系列模拟。在这里 for i in $(find /home/msvartest -name INTFILE -type f) do ( cd $(dirname $(realpath $i));

我有一个非常基本的脚本,可以在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
目前,在我的双六核机器上,我在自己的wineconsole(或wine explorer窗口)下一次运行多达20个msvar.exe副本。每个运行实例可能需要3到4天的时间,但是程序只在一个内核上运行,所以我需要并行运行模拟。看起来Gnu parallel将是运行msvar.exe的更好方式,并允许我在远程计算机上运行更多模拟。按照中的建议,我尝试让Gnu与wineconsole并行工作,但没有成功。有没有人能帮我,或者更好的是编一个我可以用的剧本


谢谢您的帮助。

我认为您的命令将变得非常冗长和笨拙,除非您使用这样的导出函数:

#!/bin/bash

doit() {
   ...
   ...
}

export -f doit
parallel -j 10 doit ::: {0..99}
因此,对于您的示例,它看起来类似于(未经测试):

不幸的是,我没有设置您的环境来测试这一点,但是如果有小错误,它应该很接近并且很容易纠正。试着看看它能做什么,然后删除
--dry run
,让它真正做点什么


如果您的文件名中有空格,您应该在
find
命令中使用
-print0
,并在
parallel
之后添加
-0
,但这只是暂时使事情复杂化。

{%}在函数中没有被替换,只是在命令行中。太棒了,这让我找到了正确的方向,我甚至大致了解了它们的工作原理(我是一名生物学家,对编程的了解只够危险!!)。现在,我们来看一下在远程服务器上使用parallel运行msvar.exe的问题。如果我只是在“parallel”和“doit”(在帮助文件后面)之间添加远程服务器的详细信息,那么远程服务器会说“doit”不是命令,原因很明显,即使对我来说也是如此。如何将其修改为复制数据文件夹,并允许其在安装了msvar.,exe的远程服务器上运行?YIKES!你也快到我能力的极限了!也许让它在一台服务器上运行,然后问一个新问题,关于如何在额外的远程服务器上并行传播数据和工作,希望Ole仍然像往常一样关注。是的。从发布在一台机器上运行的脚本开始,让我们从那里开始吧。抱歉,神奇意味着它运行了!!我所要做的就是将目录修改为正在使用的目录,删除--dry run,它马上就可以工作了。此工作doit(){echo Processing$1#cd$(dirname$(realpath“$1”);cd$(dirname$(readlink-f“$1”);wineprifix=$HOME/slot{%}wine/HOME/DaveB/msvar/msvar0.4.1b/msvar.exe}export-f doit find/HOME/DaveB/msvar/msvar\ORC\u NEWUPLOAD-name INTFILE-type f | parallel doitYep,您是对的,一如既往。看起来好多了;-)很高兴你接受了我的答案,但事实上,@OleTange(他是杰出的GNU平行图的作者)的答案更正确——请看他在我答案下面的评论。不幸的是,我不够聪明,无法让Ole的脚本正常工作——太尴尬了!!
#!/bin/bash

doit() {
   echo Processing $1
   cd $(dirname $(realpath "$1"));
   WINEPREFIX=$HOME/slot$2 wineconsole --backend=user msvar.exe
}
export -f doit

find /home/msvartest -name INTFILE -type f | parallel doit {} {%}
#!/bin/bash

doit() {
   echo Processing $1
   cd $(dirname $(realpath "$1"));
   WINEPREFIX=$HOME/slot$2 wineconsole --backend=user msvar.exe
}
export -f doit

find /home/msvartest -name INTFILE -type f | parallel doit {} {%}