【问题标题】:Executing multiple instances of script - GNU Parallel执行多个脚本实例 - GNU Parallel
【发布时间】:2015-11-13 16:04:36
【问题描述】:

我目前正在尝试使用GNU Parallel,但是我没有成功。安装非常简单。我的目标是运行 python 脚本youtube-dl 的两个并行实例及其相应的参数。使用并行执行脚本的正确方法是什么?

平行

parallel 'youtube-dl -w --no-warnings -o "/media/video1.%(ext)s" "http://www.cnn.com/videos/us/2015/11/11/stun-gun-used-on-man-in-police-custody-dies-lawsuit-dnt-brown-tsr.cnn"' 'youtube-dl -w --no-warnings -o "/media/video2.%(ext)s" "http://www.cnn.com/videos/us/2015/11/11/5-year-old-saves-family-from-house-fire.ktla"'

如果单独运行命令而不并行运行它可以工作:

youtube-dl -w --no-warnings -o "/media/video1.%(ext)s" "http://www.cnn.com/videos/us/2015/11/11/stun-gun-used-on-man-in-police-custody-dies-lawsuit-dnt-brown-tsr.cnn"

youtube-dl -w --no-warnings -o "/media/video2.%(ext)s" "http://www.cnn.com/videos/us/2015/11/11/5-year-old-saves-family-from-house-fire.ktla"

【问题讨论】:

    标签: linux bash parallel-processing


    【解决方案1】:

    对于只有两个流,在第一个命令的末尾加上一个 & 符号会更容易,你就完成了。像这样:

    youtube-dl -w --no-warnings -o "/media/video1.%(ext)s" "http://www.cnn.com/videos/us/2015/11/11/stun-gun-used-on-man-in-police-custody-dies-lawsuit-dnt-brown-tsr.cnn" &
    youtube-dl -w --no-warnings -o "/media/video2.%(ext)s" "http://www.cnn.com/videos/us/2015/11/11/5-year-old-saves-family-from-house-fire.ktla" &
    
    # Wait for both downloads to finish
    wait
    

    如果你想使用 GNU Parallel……类似这样的东西 - 虽然我通常会被告知更好的方法……:-)

    创建一个名为 work.txt 的文件,其中包含以下内容:

    /media/video1.%(ext)s http://www.cnn.com/videos/us/2015/11/11/stun-gun-used-on-man-in-police-custody-dies-lawsuit-dnt-brown-tsr.cnn
    /media/video2.%(ext)s http://www.cnn.com/videos/us/2015/11/11/5-year-old-saves-family-from-house-fire.ktla
    

    那么命令将是:

    parallel --colsep " " youtube-dl -w --no-warnings -o {1} {2} < work.txt
    

    另一种选择是简单地将两个命令放在一个文件中,然后将其发送到GNU Parallel 的标准输入,如下所示:

    将此存储在work.txt

    youtube-dl -w --no-warnings -o "/media/video1.%(ext)s" "http://www.cnn.com/videos/us/2015/11/11/stun-gun-used-on-man-in-police-custody-dies-lawsuit-dnt-brown-tsr.cnn"
    youtube-dl -w --no-warnings -o "/media/video2.%(ext)s" "http://www.cnn.com/videos/us/2015/11/11/5-year-old-saves-family-from-house-fire.ktla"
    

    然后运行

    parallel < work.txt
    

    【讨论】:

    • 非常详细的答案。我能够复制,现在它成功了。