使用shell并行启动python命令

时间:2016-12-28 11:41:34

标签: python shell parallel-processing gnu-parallel

我在python中有这样一个命令:

Python my_prog in1.fa ins.fa out1.fa
Python my_prog in2.fa ins.fa out2.fa
Python my_prog in3.fa ins.fa out3.fa

我使用了GNU parallel的并行命令,并在一个文件IN.fa中汇编了in1.fa,in2.fa和in3.fa中的文件。 我的问题是我不知道如何在并行命令中放置另一个或更多的文件。 这是我的命令:

cat IN.fa | parallel -j 20 --cat --pipe --block 3M --recstart '>' time python my_prog.py

如何在Parallel请求中创建几个参数?

1 个答案:

答案 0 :(得分:1)

让我们假设my_prog可以从stdin读取并将输出发送到stdout并且它只需要一个参数(ins.fa):

parallel --pipepart -a in.fa --block 3M Python my_prog ins.fa > out.fa

如果my_prog无法从stdin读取,而是从命名管道(fifo)读取,则可以使用:

parallel --fifo --pipepart -a in.fa Python my_prog {} ins.fa > out.fa

如果my_prog无法读取fifo,只能读取实际文件,则可以使用:

parallel --cat --pipepart -a in.fa Python my_prog {} ins.fa > out.fa

如果my_prog无法输出到stdout,但可以输出到fifo,您可以经常使用:

parallel --cat --pipepart -a in.fa Python my_prog {} ins.fa {#}.out /dev/stdout  > out.fa

或者:

parallel --cat --pipepart -a in.fa Python my_prog {} ins.fa {#}.out '>(cat)' > out.fa

如果my_prog无法输出到fifo,则需要将其输出到唯一命名的文件,然后可以cat将其删除。在这里,我们使用序列号来创建一个唯一的文件。

parallel --cat --pipepart -a in.fa Python my_prog {} ins.fa {#}.out '; cat {#}.out; rm {#}.out'  > out.fa

你真的应该考虑完成本教程。它将回答这个问题以及所以许多其他问题:man parallel_tutorial