【问题标题】:Launch python commands in parallel using shell使用 shell 并行启动 python 命令
【发布时间】:2016-12-28 11:41:33
【问题描述】:

我在 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 的parallel 命令,将文件in1.fa、in2.fa 和in3.fa 组装在一个文件IN.fa 中。 我的问题是我不知道如何在并行命令中放置另一个或更多的 agument。 这是我的命令:

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

请问如何在 Parallel 命令中创建多个参数?

【问题讨论】:

    标签: python shell parallel-processing gnu-parallel


    【解决方案1】:

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

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

    如果my_prog 无法从标准输入读取,但从命名管道 (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

    【讨论】:

    • 不!这不是我的问题。我想将我的文件 IN.fa 分区为块 3M 中的子文件,因为它们与 ins.fa 进行比较,并且每次都会在一个单独的文件中给我一个结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多