linux并行運(yùn)算命令 linux 并行計(jì)算

Linux下的并行神器——parallel

GNU Parallel的輸入源支持文件、命令行和標(biāo)準(zhǔn)輸入(stdin或pipe)。

公司主營(yíng)業(yè)務(wù):做網(wǎng)站、成都網(wǎng)站制作、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶(hù)真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶(hù)帶來(lái)驚喜。創(chuàng)新互聯(lián)推出綏棱免費(fèi)做網(wǎng)站回饋大家。

當(dāng)然,若不想像上面那樣進(jìn)行組合,可使用 --xapply 參數(shù)從每一個(gè)源獲取一個(gè)參數(shù)(或文件一行),這個(gè)參數(shù)有些類(lèi)似R中的函數(shù),具有廣播作用——如果其中一個(gè)輸入源的長(zhǎng)度比較短,它的值會(huì)被重復(fù)。

GNU Parallel可以通過(guò) --arg-sep 和 --arg-file-sep 指定分隔符替代 ::: 或 ::::,當(dāng)這兩個(gè)符號(hào)被其它命令占用的時(shí)候會(huì)特別有用。

GNU Parallel默認(rèn)把一行做為一個(gè)參數(shù):使用 \n 做為參數(shù)定界符??梢允褂?-d 改變:

GNU Parallel支持通過(guò) -E 參數(shù)指定一個(gè)值做為結(jié)束標(biāo)志:

GNU Parallel使用 --no-run-if-empty 來(lái)跳過(guò)空行:

如果parallel之后沒(méi)有給定命令,那么這些參數(shù)會(huì)被當(dāng)做命令:

此外,命令還可以是一個(gè)腳本文件,一個(gè)二進(jìn)制可執(zhí)行文件或一個(gè)bash的函數(shù)(須用 export -f 導(dǎo)出函數(shù))

GNU Parallel支持多種替換字符串,默認(rèn)使用 {},使用 -I 改變替換字符串符號(hào) {}。其最常見(jiàn)的字符串替換包括以下幾種: {.} ,去掉擴(kuò)展名; {/} ,去掉路徑,只保留文件名; {//} ,只保留路徑; {/.} ,同時(shí)去掉路徑和擴(kuò)展名; {#} ,輸出任務(wù)編號(hào)。同時(shí)對(duì)于每一個(gè)字符串替換都可以自己指定符號(hào): -I 對(duì)應(yīng) {} ; --extensionreplace 替換 {.} ; --basenamereplace 替換 {/} ; --dirnamereplace 替換 {//} ; --basenameextensionreplace 替換 {/.} ; --seqreplace 替換 {#} 。

同時(shí),如果有多個(gè)輸入源時(shí),可以通過(guò) {編號(hào)} 指定某一個(gè)輸入源的參數(shù):

使用 --header 把每一行輸入中的第一個(gè)值做為參數(shù)名。

使用 --colsep 把文件中的行切分為列,做為輸入?yún)?shù)。

--xargs 會(huì)在一行中輸入盡可能多的參數(shù)(與參數(shù)字符串長(zhǎng)度有關(guān)),通過(guò) -s 可指定一行中參數(shù)的上限。

為了獲得更好的并發(fā)性,GNU Parallel會(huì)在文件讀取結(jié)束后再分發(fā)參數(shù)。

GNU Parallel 在讀取完最后一個(gè)參數(shù)之后,才開(kāi)始第二個(gè)任務(wù),此時(shí)會(huì)把所有的參數(shù)平均分配到4個(gè)任務(wù)(如果指定了4個(gè)任務(wù))。

第一個(gè)任務(wù)與上面使用 --xargs 的例子一樣,但是第二個(gè)任務(wù)會(huì)被平均的分成4個(gè)任務(wù),最終一共5個(gè)任務(wù)。(奇怪的是我的結(jié)果與官網(wǎng)教程的結(jié)果不一樣)

替換字符串可以是輸出字符的一部分,使用 -m 參數(shù)表示每個(gè)job不重復(fù)輸出“背景”(context), -X 則與 -m 相反,會(huì)重復(fù)輸出“背景文本”,具體通過(guò)下面幾個(gè)例子進(jìn)行理解:

使用 -N 限制每行參數(shù)的個(gè)數(shù),其中 -N0 表示一次只讀取一個(gè)參數(shù),且不輸入這個(gè)參數(shù)(作為計(jì)數(shù)器來(lái)使用)。

如果命令行中包含特殊字符,就需要使用引號(hào)保護(hù)起來(lái)。

perl腳本 'print "@ARGV\n"' 與linux的 echo 的功能一樣。

使用GNU Parallel運(yùn)行這條命令的時(shí)候,perl命令需要用引號(hào)包起來(lái),也可以使用 -q 保護(hù)perl命令:

使用 --trim 去除參數(shù)兩頭的空格:

使用 --tag 以參數(shù)做為輸出前綴,使用 --tagstring 修改輸出前綴:

--dryrun 作用類(lèi)似于echo:

--verbose 則在運(yùn)行之前先打印命令:

一般來(lái)說(shuō),GNU Parallel 會(huì)延遲輸出,直到一組命令執(zhí)行完成。使用 --ungroup ,可立刻打印輸出已完成部分。

使用 --ungroup 會(huì)很快,但會(huì)導(dǎo)致輸出錯(cuò)亂,一個(gè)任務(wù)的行輸出可能會(huì)被另一個(gè)任務(wù)的輸出截?cái)?。像上例所示,第二行輸出混合了兩個(gè)任務(wù): '4-middle' '2-start'。使用 --linebuffer 避免這個(gè)問(wèn)題(稍慢一點(diǎn)):

強(qiáng)制使輸出與參數(shù)保持順序 --keep-order/-k :

GNU Parallel可以把每一個(gè)任務(wù)的輸出保存到文件中,臨時(shí)文件默認(rèn)保存在 /tmp 中,可以使用 --tmpdir改變(或者修改 $TMPDIR):

輸出文件可以有結(jié)構(gòu)的保存 --results ,輸出文件不僅包含標(biāo)準(zhǔn)輸出(stdout)也會(huì)包含標(biāo)準(zhǔn)錯(cuò)誤輸出(stderr):

在使用多個(gè)變量的時(shí)候會(huì)顯示很有用:

使用 --jobs/-j 指定并行任務(wù)數(shù)。

通過(guò)使用 --interactive 在一個(gè)任務(wù)執(zhí)行之前讓用戶(hù)決定是否執(zhí)行。

當(dāng)job有大量的IO操作時(shí),為避免 “驚群效應(yīng)” ,可使用 --delay 參數(shù)指定各個(gè)job開(kāi)始的時(shí)間間隔。

若已知任務(wù)超過(guò)一定時(shí)間未反應(yīng)則為失敗則可以通過(guò) --timeout 指定等待時(shí)間避免無(wú)謂的等待。GNU parallel能計(jì)算所有任務(wù)運(yùn)行時(shí)間的中位數(shù),因此可以指定時(shí)間為中位數(shù)的倍數(shù)關(guān)系。

GNU parallel有多種方式可用來(lái)動(dòng)態(tài)的顯示任務(wù)進(jìn)度信息,如:

使用 --joblog 參數(shù)能夠生成各個(gè)任務(wù)的日志文件:

通過(guò) --resume-failed 參數(shù)可以重新運(yùn)行失敗的任務(wù); --retry-failed 的作用與 --resume-failed 類(lèi)似,只是 --resume-failed 從命令行讀取失敗任務(wù),而 --retry-failed 則是從日志文件中讀取失敗任務(wù):

GNU parallel支持在某一情況下(如第一個(gè)失敗或成功時(shí),或者20%任務(wù)失敗時(shí))終止任務(wù),終止任務(wù)又有兩種類(lèi)型,其一為立即終止(通過(guò) --halt now 指定),殺死所有正在運(yùn)行的任務(wù)并停止生成新的任務(wù),其二為稍后終止(通過(guò) --halt soon 指定),停止生成新任務(wù)并等待正在運(yùn)行任務(wù)完成。

GNU parallel還支持在任務(wù)失敗后重試運(yùn)行 --retries :

關(guān)于終止信號(hào)的高級(jí)用法參考 官方入門(mén)文檔 。

GNU parallel能夠在開(kāi)始一個(gè)新的任務(wù)前檢查系統(tǒng)的負(fù)載情況防止過(guò)載(通過(guò) --load 可指定負(fù)載),同時(shí)還能檢查系統(tǒng)是否使用了交換空間(swap)(通過(guò) --noswap 限制使用swap)。

同時(shí),對(duì)于某些占用內(nèi)存較多的程序,parallel會(huì)檢查內(nèi)存只有內(nèi)存滿(mǎn)足時(shí)才啟動(dòng)任務(wù)(通過(guò) --memfree 指定需要內(nèi)存大?。以趩?dòng)任務(wù)后內(nèi)存不夠50%時(shí)會(huì)殺掉最新開(kāi)始的任務(wù),直到這個(gè)任務(wù)完成再重新開(kāi)始那些殺死的任務(wù)。

還可以通過(guò) --nice 來(lái)指定任務(wù)的優(yōu)先級(jí)。

可使用 -S host 來(lái)進(jìn)行遠(yuǎn)程登陸:

parallel -S username@$SERVER1 echo running on ::: username@$SERVER1

GNU parallel 文件傳輸使用的是rsync。

更多遠(yuǎn)程操作參見(jiàn)入門(mén)文檔。

--pipe 參數(shù)使得我們可以將輸入(stdin)分為多塊(block),然后分配給多個(gè)任務(wù)多個(gè)cpu以達(dá)到負(fù)載均衡,最后的結(jié)果順序與原始順序一致。使用 --block 參數(shù)可以指定每塊的大小,默認(rèn)為1M。

如果不關(guān)心結(jié)果順序,只想要快速的得到結(jié)果,可使用 --round-robin 參數(shù)。沒(méi)有這個(gè)參數(shù)時(shí)每塊文件都會(huì)啟動(dòng)一個(gè)命令,使用這個(gè)參數(shù)后會(huì)將這些文件塊分配給job數(shù)任務(wù)(通過(guò) --jobs 進(jìn)行指定)。若想分配更為均勻還可同時(shí)指定 --block 參數(shù)。

參考:

官方文檔

GNU Parallel指南

Linux Parallel 簡(jiǎn)單用法

parallel是一個(gè)Linux命令行并行工具(mac也可以用)

這里只說(shuō)一種簡(jiǎn)單的用法,基本上能滿(mǎn)足日常工作需求,

假設(shè)當(dāng)前目錄有三個(gè) *.txt 文件,我們使用gzip對(duì)著三個(gè)文件進(jìn)行壓縮

1.順序執(zhí)行語(yǔ)句:

2.parallel并行版本

3.讀取命令版本

linux怎么用一步命令實(shí)現(xiàn)多個(gè)腳本并行執(zhí)行?

(run1.sh?)?;?(run2.sh?)?;?(run3.sh)

如果還有繼續(xù)加

網(wǎng)頁(yè)題目:linux并行運(yùn)算命令 linux 并行計(jì)算
標(biāo)題鏈接:http://www.muchs.cn/article38/hhiopp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開(kāi)發(fā)手機(jī)網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)站內(nèi)鏈、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)