【问题标题】:Parallel processing or multi-threading in Shell scriptingShell 脚本中的并行处理或多线程
【发布时间】:2020-09-09 14:52:59
【问题描述】:

我正在 shell 中编写一个脚本,以使用 curl 调用从应用程序中提取文件,并提取 100 个文件需要 30 多分钟。

我想将其拆分为多个块并进行并行 curl 调用(例如:每次调用 10 个文件)。

我是并行处理/线程的新手。

【问题讨论】:

  • 定义一个执行10次curl调用的函数;然后编写一个循环调用函数 10 次,确保将函数调用放在后台(例如,for i in {1..10}; do runcurlfunc & done

标签: bash multithreading shell parallel-processing scripting


【解决方案1】:

Q“我想...做一个平行的curl电话...”

有关所有可能的语法详细信息,请以 man parallel

开头

接下来,也可以使用一些curl-tricks,但只能使用不与parallel 语法元素冲突的那些。

由于 fileIO-ops 既慢又承受相当高的 (但可屏蔽) 延迟,许多并发进程可能会增长得非常高:

parallel --jobs 24 \
         --dry-run  \
    curl             \
         ftps://a.b.c.d/node7-{1}/{1}-{2}/{1}-{2}-{3}-{4}_*.jpg \
    ::: "LKLN" "LKRO" "LKPM"                                     \
    ::: $( seq -f "%04g" 2011 2020 )                              \
    ::: $( seq -f "%02g" 4  6 )                                    \
    ::: $( seq -f "%02g" 1 31 )                                     \

将产生一个演示:

...
curl ftps://a.b.c.d/node7-LKLN/LKLN-2020/LKLN-2020-06-29_*.jpg
curl ftps://a.b.c.d/node7-LKLN/LKLN-2020/LKLN-2020-06-30_*.jpg
curl ftps://a.b.c.d/node7-LKLN/LKLN-2020/LKLN-2020-06-31_*.jpg
curl ftps://a.b.c.d/node7-LKRO/LKRO-2011/LKRO-2011-04-01_*.jpg
curl ftps://a.b.c.d/node7-LKRO/LKRO-2011/LKRO-2011-04-02_*.jpg
curl ftps://a.b.c.d/node7-LKRO/LKRO-2011/LKRO-2011-04-03_*.jpg
...

全部拆分在上述 24 个 parallel-编排进程中

最后随意调整您的脚本策略,以满足和匹配您的实际传输、存储、处理器和内存容量、日志记录和自我报告需求。

您成为parallel-orchestrated 处理的下一位大师。

所有学分,自 2007 年起,归 Ole Tange!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    相关资源
    最近更新 更多