Bash

如何將來自多個後台作業的數據合併回bash中的單個數據流

  • May 23, 2022

我遇到過一些類似的情況,我可以將單核綁定任務分解為多個部分,並將每個部分作為單獨的作業在 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 有很多功能可以將任務拆分為更小的作業。也許您甚至可以使用其中之一來產生較小的工作?

引用自:https://unix.stackexchange.com/questions/703568