使用多个进程排队启动 bash 个作业
Queue using several processes to launch bash jobs
我需要 运行 shell 中的许多(数百)条命令,但我只想一次最多有 4 个进程 运行ning(来自队列)。每个过程将持续几个小时。
当进程完成时,我希望下一个命令从队列中 "popped" 并执行。
我也希望能够在开始后添加更多进程,如果我能从队列中删除一些作业,或者至少清空队列,那就太好了。
我见过使用 makefile 的解决方案,但这只有在我在开始之前拥有所有命令列表时才有效。还尝试使用 mkfifo sjobq 和其他工具,但我始终无法满足我的需求...
有没有人有解决这个问题的代码?
编辑:回应 Mark Setchell
tail -f 和 parallel 的解决方案几乎是完美的,但是当我这样做时,它总是不启动最后 4 个命令,直到我添加更多,等等,我不知道为什么,它挺麻烦的...
对于Redis,也是很好的解决方案,但是需要更多的时间来掌握它。
谢谢!
使用 GNU Parallel 创建这样的作业队列:
# Clear out file containing job queue
> jobqueue
# Start GNU Parallel processing jobs from queue
# -k means "keep" output in order
# -j 4 means run 4 jobs at a time
tail -f jobqueue | parallel -k -j 4
# From another terminal, submit 40 jobs to the queue
for i in {1..40}; do echo "sleep 5;date +'%H:%M:%S Job $i'"; done >> jobqueue
另一种选择是使用 REDIS - 请在此处查看我的回答 Run several jobs parallelly and Efficiently
我需要 运行 shell 中的许多(数百)条命令,但我只想一次最多有 4 个进程 运行ning(来自队列)。每个过程将持续几个小时。
当进程完成时,我希望下一个命令从队列中 "popped" 并执行。
我也希望能够在开始后添加更多进程,如果我能从队列中删除一些作业,或者至少清空队列,那就太好了。
我见过使用 makefile 的解决方案,但这只有在我在开始之前拥有所有命令列表时才有效。还尝试使用 mkfifo sjobq 和其他工具,但我始终无法满足我的需求...
有没有人有解决这个问题的代码?
编辑:回应 Mark Setchell
tail -f 和 parallel 的解决方案几乎是完美的,但是当我这样做时,它总是不启动最后 4 个命令,直到我添加更多,等等,我不知道为什么,它挺麻烦的...
对于Redis,也是很好的解决方案,但是需要更多的时间来掌握它。
谢谢!
使用 GNU Parallel 创建这样的作业队列:
# Clear out file containing job queue
> jobqueue
# Start GNU Parallel processing jobs from queue
# -k means "keep" output in order
# -j 4 means run 4 jobs at a time
tail -f jobqueue | parallel -k -j 4
# From another terminal, submit 40 jobs to the queue
for i in {1..40}; do echo "sleep 5;date +'%H:%M:%S Job $i'"; done >> jobqueue
另一种选择是使用 REDIS - 请在此处查看我的回答 Run several jobs parallelly and Efficiently