使用 xargs 进行并行处理
随着我们的图书馆不断扩展,我们希望加快文件处理速度。xargs
的 -P
选项允许我们并行运行命令,这可以显著提高 I/O 密集型操作的性能。
首先,让我们创建一个脚本,通过向书籍内容添加时间戳来模拟处理书籍的过程:
cat ~/project/process_book.sh
你应该会看到:
#!/bin/bash
echo "Processing $1 at $(date)" > ~/project/processed_$1
sleep 2 ## 模拟一些处理时间
这个脚本的功能如下:
- 它接受一个书籍标题作为参数(
$1
)。
- 它创建一个新文件,文件名前缀为
processed_
加上书籍标题。
- 它将一条消息写入该文件,包括当前日期和时间。
- 它等待 2 秒以模拟一些处理时间。
现在,我们使用 xargs
的 -P
选项来并行处理书籍:
cat ~/project/more_books.txt | xargs -P 3 -I {} ~/project/process_book.sh {}
让我们分解一下这个命令:
cat ~/project/more_books.txt
:读取我们的书籍列表。
|
:这个管道符号将输出发送到 xargs
。
xargs -P 3
:这告诉 xargs
最多同时运行 3 个进程。
-I {}
:这定义 {}
为每个输入项的占位符。
~/project/process_book.sh {}
:这是为每本书运行的命令,{}
被替换为书籍标题。
此命令将同时开始处理最多 3 本书。运行命令后,你可以检查已处理文件的内容:
cat ~/project/processed_*
你应该会看到输出显示书籍在不同的时间被处理,表明并行执行。具体时间会有所不同,但你可能会看到类似以下内容:
Processing Pride_and_Prejudice at Mon Aug 12 10:15:01 UTC 2024
Processing The_Catcher_in_the_Rye at Mon Aug 12 10:15:01 UTC 2024
Processing The_Hobbit at Mon Aug 12 10:15:01 UTC 2024
Processing Animal_Farm at Mon Aug 12 10:15:03 UTC 2024
Processing Brave_New_World at Mon Aug 12 10:15:03 UTC 2024
请注意,前三本书同时开始处理,最后两本大约在 2 秒后开始(由于脚本中的 sleep 2
)。这展示了并行处理的实际效果。