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

标签 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 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/

相关文章:

python - 如何在python中使用mechanize将字符串输入到表单的某个部分?

python - python 中的异常处理和继续 for 循环

clojure - 在搜索不断增长的解决方案空间时,应使用哪种 clojure 并行技术?

c# - 单个线程上的线程 WaitHandle

makefile - 无法执行 makefile 中目标的所有先决条件

linux - 为什么在 omap 器件的 TI x-loader makefile 中使用 $$PWD 而不是 $PWD

java - 使用 java gnu 串行端口类

c++ - 为什么 std::for_each 比 __gnu_parallel::for_each 快

javascript - 如何检查是否已下载所有 CSS 文件以使用 JavaScript 插入 HTML?

linux - 直接从 SLURM/SGE 调用系统命令