Linux 使用 parallel 來同時平行多工處理

Linux 於 Shell 不想寫程式,又想要程式可以平行處理,可以使用 parallel 來處理。

Linux 使用 parallel 來同時平行多工處理

Parallel 的程式簡介

  • parallel - build and execute command lines from standard input in parallel

parallel 安裝步驟

  • sudo apt install parallel

parallel 的功能非常多,建議先 man parallel 來查看,下面只有先列列範例參考看看:

  • seq -w 0 100 | parallel -j 8 touch {}.txt
  • seq -w 0 9999 | parallel -j 8 rm pict{}.jpg
  • find . -name '.jpg' | parallel convert -geometry 120 {} {}_thumb.jpg
  • find . -type d -name ".svn" -print | parallel rm -rf # 取代 xargs, find . -type d -name ".svn" -print | xargs rm -rf
  • cat file.txt | parallel -j 8 --pipe -L 50000 import_script
    • -j 8:並行 jobs 的數量,不想並行執行可以設為 1。若不加 -j,則預設為每個 CPU 執行一個 job
    • --pipe:從 stdin 讀取, 再將 stdin 的資料分給各個jobs
    • -L N: 一次最多讀取N行

使用 parallel 同時傳送命令到各台機器

  • echo "command" | parallel --onall --slf servers.txt
    • ex: echo "ls" | parallel --onall --slf servers.txt # servers.txt (w1.example.com, w2.example.com.. 一行一個 domain name)
  • echo "grep QueryKeyword /var/log/apache2/access.log" | parallel –onall –slf servers.txt

使用 xargs 來平行處理(感謝 CHUNG TSAI)

  • $ cat filename | xargs -P 8 touch # filename 內容是一行一行的東西,這個會 touch 出 filename 一行一行當檔名

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

在〈Linux 使用 parallel 來同時平行多工處理〉中有 6 則留言

  1. # xargs -P 8
    # 也可以這樣做;
    # man xargs 裏面說

    -P max-procs, --max-procs=max-procs
    Run up to max-procs processes at a time; the default is 1.

  2. 但是這樣子沒辦法解決一個process 要跑很久的問題吧?假如說我有一個簡單迴圈,就計算1-1000000萬的總和,就算用 xargs -P 8 ,實際上也只有用到一個core在運算。
    請問有沒有方式可以把這個迴圈拆給8個核心去算?

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料