如何在 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 搜索框中。
#!/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 搜索框中。