我正在尝试使用两个输入运行Python脚本,如下所示。我得到了这两个输入中的~300个,所以我想知道是否有人可以建议如何并行运行它们。
单次运行如下:
python stable.py KOG_1.fan KOG_1.fasta > KOG_1.stable
我的并行测试无效:
ls *.fan; ls *.fasta | parallel python stable.py {} {} > {.}.stable
但如何指定必须与_1.fan
和_1.fasta
一起运行;然后是_2.fan
和_1.fasta
等等......直到_300.fan
和_300.fasta
。
答案 0 :(得分:2)
这不是一个Python问题,它是关于GNU并行的问题。如果所有文件都以" KOG _":
作为前缀,则可以尝试此操作seq 1 300 | parallel python stable.py KOG_{}.fan KOG_{}.fasta ">" KOG_{.}.stable
重定向(">"
)周围的引号非常重要,除非您希望将所有输出都放在一个文件中。
处理通用前缀:
ls *fan *fasta | parallel ---max-lines=2 python stable.py {1} {2} ">" {1.}.stable
这使用-max-lines
选项为每个命令占用2行。当然,这仅适用于*.fan
和*.fasta
文件匹配,即每个文件必须相同的数量,并且数字需要匹配,否则您将最终配对文件那不应该是配对的。如果这是一个问题,您可以找出一个更强大地将对提供给parallel
的命令。
答案 1 :(得分:1)
尝试:
function fillRouteNames($routes,$export)
{
for($i=0;$i < count($routes);$i++)
{
$disps = $routes[$i]['d'];
$nd = array();
foreach($disps as $disp) $nd[] = fxnName($disp,$export);
$routes[$i]['nd'] = $nd;
}
return $routes;
}
答案 2 :(得分:0)
我建议您分两步拆分此任务:
创建一个包含您要运行的所有命令的作业文件
平行。强>
您需要创建一个文本文件jobs.txt
,该文件应与下面的文本文件类似:
python stable.py KOG_1.fan KOG_1.fasta > KOG_1.stable
python stable.py KOG_2.fan KOG_2.fasta > KOG_2.stable
python stable.py KOG_3.fan KOG_3.fasta > KOG_3.stable
python stable.py KOG_4.fan KOG_4.fasta > KOG_4.stable
...
python stable.py KOG_300.fan KOG_300.fasta > KOG_300.stable
如果您的所有文件都以KOG为前缀,则可以通过以下方式构建此文件:
for I in `seq 300`; do echo "python stable.py KOG_$I.fan KOG_$I.fasta > KOG_$I.stable" >> jobs.txt; done;
使用作业文件
运行并行获得作业文件后,只需运行以下命令:
parallel -j4 < jobs.txt
请注意,-j4
表示您的作业文件中最多有4个命令将并行运行。您可以根据计算机上可用的核心数进行调整。