【发布时间】:2018-07-17 19:33:21
【问题描述】:
我有几个大文件需要传输到本地计算机并进行处理。传输大约需要处理文件的时间,我想在传输后立即开始处理它。但处理时间可能比传输时间长,我不希望进程继续增加,但我想将其限制为某个数字,比如 4。
考虑以下几点:
LIST_OF_LARGE_FILES="file1 file2 file3 file4 ... fileN"
for FILE in $LIST_OF_LARGE_FILES; do
scp user@host:$FILE ./
myCommand $FILE &
done
这将传输每个文件并在传输后开始处理它,同时允许下一个文件开始传输。但是,如果myCommand $FILE 花费的时间比传输一个文件的时间长得多,则这些文件可能会不断堆积并阻塞本地计算机。所以我想将myCommand 限制为 2-4 个并行实例。调用myCommand 的后续尝试应该缓冲它,直到“槽”打开。有没有在 BASH 中执行此操作的好方法(可以使用 xargs 或其他实用程序)。
更新: 感谢您的帮助。现在我正在尝试实现以下逻辑:
LIST_OF_LARGE_FILES="file1 file2 file3 file4 ... fileN"
for FILE in $LIST_OF_LARGE_FILES; do
echo "Starting on $FILE" # should go to terminal output
scp user@host:$FILE ./
echo "Processing $FILE" # should go to terminal output
echo $FILE # should go through pipe to parallel
done | parallel myCommand
【问题讨论】:
标签: bash parallel-processing background