GNU Parallel的輸入源支持文件、命令行和標(biāo)準(zhǔn)輸入(stdin或pipe)。
站在用戶的角度思考問題,與客戶深入溝通,找到依蘭網(wǎng)站設(shè)計與依蘭網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗(yàn)好的作品,建站類型包括:做網(wǎng)站、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋依蘭地區(qū)。
當(dāng)然,若不想像上面那樣進(jìn)行組合,可使用 --xapply 參數(shù)從每一個源獲取一個參數(shù)(或文件一行),這個參數(shù)有些類似R中的函數(shù),具有廣播作用——如果其中一個輸入源的長度比較短,它的值會被重復(fù)。
GNU Parallel可以通過 --arg-sep 和 --arg-file-sep 指定分隔符替代 ::: 或 ::::,當(dāng)這兩個符號被其它命令占用的時候會特別有用。
GNU Parallel默認(rèn)把一行做為一個參數(shù):使用 \n 做為參數(shù)定界符??梢允褂?-d 改變:
GNU Parallel支持通過 -E 參數(shù)指定一個值做為結(jié)束標(biāo)志:
GNU Parallel使用 --no-run-if-empty 來跳過空行:
如果parallel之后沒有給定命令,那么這些參數(shù)會被當(dāng)做命令:
此外,命令還可以是一個腳本文件,一個二進(jìn)制可執(zhí)行文件或一個bash的函數(shù)(須用 export -f 導(dǎo)出函數(shù))
GNU Parallel支持多種替換字符串,默認(rèn)使用 {},使用 -I 改變替換字符串符號 {}。其最常見的字符串替換包括以下幾種: {.} ,去掉擴(kuò)展名; {/} ,去掉路徑,只保留文件名; {//} ,只保留路徑; {/.} ,同時去掉路徑和擴(kuò)展名; {#} ,輸出任務(wù)編號。同時對于每一個字符串替換都可以自己指定符號: -I 對應(yīng) {} ; --extensionreplace 替換 {.} ; --basenamereplace 替換 {/} ; --dirnamereplace 替換 {//} ; --basenameextensionreplace 替換 {/.} ; --seqreplace 替換 {#} 。
同時,如果有多個輸入源時,可以通過 {編號} 指定某一個輸入源的參數(shù):
使用 --header 把每一行輸入中的第一個值做為參數(shù)名。
使用 --colsep 把文件中的行切分為列,做為輸入?yún)?shù)。
--xargs 會在一行中輸入盡可能多的參數(shù)(與參數(shù)字符串長度有關(guān)),通過 -s 可指定一行中參數(shù)的上限。
為了獲得更好的并發(fā)性,GNU Parallel會在文件讀取結(jié)束后再分發(fā)參數(shù)。
GNU Parallel 在讀取完最后一個參數(shù)之后,才開始第二個任務(wù),此時會把所有的參數(shù)平均分配到4個任務(wù)(如果指定了4個任務(wù))。
第一個任務(wù)與上面使用 --xargs 的例子一樣,但是第二個任務(wù)會被平均的分成4個任務(wù),最終一共5個任務(wù)。(奇怪的是我的結(jié)果與官網(wǎng)教程的結(jié)果不一樣)
替換字符串可以是輸出字符的一部分,使用 -m 參數(shù)表示每個job不重復(fù)輸出“背景”(context), -X 則與 -m 相反,會重復(fù)輸出“背景文本”,具體通過下面幾個例子進(jìn)行理解:
使用 -N 限制每行參數(shù)的個數(shù),其中 -N0 表示一次只讀取一個參數(shù),且不輸入這個參數(shù)(作為計數(shù)器來使用)。
如果命令行中包含特殊字符,就需要使用引號保護(hù)起來。
perl腳本 'print "@ARGV\n"' 與linux的 echo 的功能一樣。
使用GNU Parallel運(yùn)行這條命令的時候,perl命令需要用引號包起來,也可以使用 -q 保護(hù)perl命令:
使用 --trim 去除參數(shù)兩頭的空格:
使用 --tag 以參數(shù)做為輸出前綴,使用 --tagstring 修改輸出前綴:
--dryrun 作用類似于echo:
--verbose 則在運(yùn)行之前先打印命令:
一般來說,GNU Parallel 會延遲輸出,直到一組命令執(zhí)行完成。使用 --ungroup ,可立刻打印輸出已完成部分。
使用 --ungroup 會很快,但會導(dǎo)致輸出錯亂,一個任務(wù)的行輸出可能會被另一個任務(wù)的輸出截斷。像上例所示,第二行輸出混合了兩個任務(wù): '4-middle' '2-start'。使用 --linebuffer 避免這個問題(稍慢一點(diǎn)):
強(qiáng)制使輸出與參數(shù)保持順序 --keep-order/-k :
GNU Parallel可以把每一個任務(wù)的輸出保存到文件中,臨時文件默認(rèn)保存在 /tmp 中,可以使用 --tmpdir改變(或者修改 $TMPDIR):
輸出文件可以有結(jié)構(gòu)的保存 --results ,輸出文件不僅包含標(biāo)準(zhǔn)輸出(stdout)也會包含標(biāo)準(zhǔn)錯誤輸出(stderr):
在使用多個變量的時候會顯示很有用:
使用 --jobs/-j 指定并行任務(wù)數(shù)。
通過使用 --interactive 在一個任務(wù)執(zhí)行之前讓用戶決定是否執(zhí)行。
當(dāng)job有大量的IO操作時,為避免 “驚群效應(yīng)” ,可使用 --delay 參數(shù)指定各個job開始的時間間隔。
若已知任務(wù)超過一定時間未反應(yīng)則為失敗則可以通過 --timeout 指定等待時間避免無謂的等待。GNU parallel能計算所有任務(wù)運(yùn)行時間的中位數(shù),因此可以指定時間為中位數(shù)的倍數(shù)關(guān)系。
GNU parallel有多種方式可用來動態(tài)的顯示任務(wù)進(jìn)度信息,如:
使用 --joblog 參數(shù)能夠生成各個任務(wù)的日志文件:
通過 --resume-failed 參數(shù)可以重新運(yùn)行失敗的任務(wù); --retry-failed 的作用與 --resume-failed 類似,只是 --resume-failed 從命令行讀取失敗任務(wù),而 --retry-failed 則是從日志文件中讀取失敗任務(wù):
GNU parallel支持在某一情況下(如第一個失敗或成功時,或者20%任務(wù)失敗時)終止任務(wù),終止任務(wù)又有兩種類型,其一為立即終止(通過 --halt now 指定),殺死所有正在運(yùn)行的任務(wù)并停止生成新的任務(wù),其二為稍后終止(通過 --halt soon 指定),停止生成新任務(wù)并等待正在運(yùn)行任務(wù)完成。
GNU parallel還支持在任務(wù)失敗后重試運(yùn)行 --retries :
關(guān)于終止信號的高級用法參考 官方入門文檔 。
GNU parallel能夠在開始一個新的任務(wù)前檢查系統(tǒng)的負(fù)載情況防止過載(通過 --load 可指定負(fù)載),同時還能檢查系統(tǒng)是否使用了交換空間(swap)(通過 --noswap 限制使用swap)。
同時,對于某些占用內(nèi)存較多的程序,parallel會檢查內(nèi)存只有內(nèi)存滿足時才啟動任務(wù)(通過 --memfree 指定需要內(nèi)存大小),而且在啟動任務(wù)后內(nèi)存不夠50%時會殺掉最新開始的任務(wù),直到這個任務(wù)完成再重新開始那些殺死的任務(wù)。
還可以通過 --nice 來指定任務(wù)的優(yōu)先級。
可使用 -S host 來進(jìn)行遠(yuǎn)程登陸:
parallel -S username@$SERVER1 echo running on ::: username@$SERVER1
GNU parallel 文件傳輸使用的是rsync。
更多遠(yuǎn)程操作參見入門文檔。
--pipe 參數(shù)使得我們可以將輸入(stdin)分為多塊(block),然后分配給多個任務(wù)多個cpu以達(dá)到負(fù)載均衡,最后的結(jié)果順序與原始順序一致。使用 --block 參數(shù)可以指定每塊的大小,默認(rèn)為1M。
如果不關(guān)心結(jié)果順序,只想要快速的得到結(jié)果,可使用 --round-robin 參數(shù)。沒有這個參數(shù)時每塊文件都會啟動一個命令,使用這個參數(shù)后會將這些文件塊分配給job數(shù)任務(wù)(通過 --jobs 進(jìn)行指定)。若想分配更為均勻還可同時指定 --block 參數(shù)。
參考:
官方文檔
GNU Parallel指南
parallel是一個Linux命令行并行工具(mac也可以用)
這里只說一種簡單的用法,基本上能滿足日常工作需求,
假設(shè)當(dāng)前目錄有三個 *.txt 文件,我們使用gzip對著三個文件進(jìn)行壓縮
1.順序執(zhí)行語句:
2.parallel并行版本
3.讀取命令版本
(run1.sh?)?;?(run2.sh?)?;?(run3.sh)
如果還有繼續(xù)加
分享名稱:linux并行執(zhí)行命令 linux并發(fā)執(zhí)行
文章分享:http://jinyejixie.com/article0/ddcciio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、動態(tài)網(wǎng)站、移動網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、外貿(mào)網(wǎng)站建設(shè)、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)