Bash
如何將來自多個後台作業的數據合併回bash中的單個數據流
我遇到過一些類似的情況,我可以將單核綁定任務分解為多個部分,並將每個部分作為單獨的作業在 bash 中執行以將其並行化,但我很難將返回的數據整理回單個數據溪流。到目前為止,我的天真的方法必須創建一個臨時文件夾,跟踪 PID,讓每個執行緒使用其 pid 寫入文件,然後在所有作業完成後讀取所有 pid 並將它們按 PID 生成的順序合併到一個文件中。有沒有更好的方法來使用 bash/shell 工具來處理這種多入一出的情況?
到目前為止,我的天真的方法必須創建一個臨時文件夾,跟踪 PID,讓每個執行緒使用其 pid 寫入文件,然後在所有作業完成後讀取所有 pid 並將它們按 PID 生成的順序合併到一個文件中。
這幾乎正是 GNU Parallel 所做的。
parallel do_stuff ::: job1 job2 job3 ... jobn > output
還有一些額外的好處:
- 臨時文件會自動刪除,因此不會進行清理——即使您殺死了 GNU Parallel。
- 您只需要用於目前執行的作業的臨時空間:當作業完成時,已完成作業的臨時空間會被釋放。
- 如果您希望以與輸入相同的順序輸出,請使用
--keep-order
.- 如果要從不同作業中逐行混合輸出,請使用
--line-buffer
.GNU Parallel 有很多功能可以將任務拆分為更小的作業。也許您甚至可以使用其中之一來產生較小的工作?