如何在 shell 脚本中启动多个作业实例来处理目录中的多个文件?

How to start multiple job instance in a shell script to process multiple files in a directory?

#!/bin/bash

      data_dir=./all
      for file_name in "$data_dir"/*
      do
        echo "$file_name"
        python process.py "$file_name"
      done
   

例如,此脚本在 'for' 循环中按顺序处理目录中的文件。是否可以启动多个 process.py 实例并发处理文件?我想在 shell 脚本中执行此操作。

最好使用os.listdir and subprocess.Popen启动新进程。

如果还需要的话,我还有另一种可能性。它使用 screen 命令通过提供的命令创建一个新的分离进程。

这是一个例子:

#!/bin/bash

data_dir=./all
for file_name in "$data_dir"/*
do
  echo "$file_name"
  screen -dm python process.py "$file_name"
done

使用 GNU Parallel,像这样:

parallel python process.py {} ::: all/*

它将 运行 N 个并行作业,其中 N 是您拥有的 CPU 个内核的数量,或者您可以指定 -j4 到 运行 仅在 4 ,例如。

很多很多选项:

  • 日志记录,
  • splitting/chunking 输入,
  • tagging/separating输出,
  • 惊人的工作开始,
  • 按摩输入参数,
  • 失败并重试处理,
  • 正在将作业和数据分发到其他机器
  • 等等...

尝试将 [gnu-parallel] 放入 Whosebug 搜索框中。