真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

linux并行命令,linux并行計(jì)算

Linux下的并行神器——parallel

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

創(chuàng)新互聯(lián)建站專注于衡水企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),商城網(wǎng)站定制開發(fā)。衡水網(wǎng)站建設(shè)公司,為衡水等地區(qū)提供建站服務(wù)。全流程按需求定制網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)

當(dāng)然,若不想像上面那樣進(jìn)行組合,可使用 --xapply 參數(shù)從每一個(gè)源獲取一個(gè)參數(shù)(或文件一行),這個(gè)參數(shù)有些類似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) {}。其最常見的字符串替換包括以下幾種: {.} ,去掉擴(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ù)之后,才開始第二個(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 作用類似于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í)行之前讓用戶決定是否執(zhí)行。

當(dāng)job有大量的IO操作時(shí),為避免 “驚群效應(yīng)” ,可使用 --delay 參數(shù)指定各個(gè)job開始的時(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 類似,只是 --resume-failed 從命令行讀取失敗任務(wù),而 --retry-failed 則是從日志文件中讀取失敗任務(wù):

GNU parallel支持在某一情況下(如第一個(gè)失敗或成功時(shí),或者20%任務(wù)失敗時(shí))終止任務(wù),終止任務(wù)又有兩種類型,其一為立即終止(通過(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í)用法參考 官方入門文檔 。

GNU parallel能夠在開始一個(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)存滿足時(shí)才啟動(dòng)任務(wù)(通過(guò) --memfree 指定需要內(nèi)存大?。?,而且在啟動(dòng)任務(wù)后內(nèi)存不夠50%時(shí)會(huì)殺掉最新開始的任務(wù),直到這個(gè)任務(wù)完成再重新開始那些殺死的任務(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)程操作參見入門文檔。

--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怎么用一步命令實(shí)現(xiàn)多個(gè)腳本并行執(zhí)行?

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

如果還有繼續(xù)加

linux怎么使多條命令同時(shí)執(zhí)行

一次執(zhí)行多個(gè)命令可以將多個(gè)命令用英文分號(hào)分割,比如像這樣:

mkdir /tmp/mydir; touch /tmp/mydir/myfile

其實(shí)這樣也不能算是同時(shí)執(zhí)行,Linux的命令是順序執(zhí)行的,就算是shell腳本,里面寫了一大堆命令,同樣也順序執(zhí)行的。如果前一個(gè)命令執(zhí)行的時(shí)間比較長(zhǎng),后面的命令就只有等待了。如果命令執(zhí)行時(shí)間比較長(zhǎng),又想讓命令同時(shí)執(zhí)行,恐怕只能打開多個(gè)虛擬終端才行(右鍵虛擬終端界面,選擇“打開標(biāo)簽”),打開多個(gè)登錄的虛擬終端其實(shí)是運(yùn)行了多個(gè)“會(huì)話”,多個(gè)“會(huì)話”中的命令才是“同時(shí)”執(zhí)行。


分享題目:linux并行命令,linux并行計(jì)算
本文路徑:http://weahome.cn/article/dssgpie.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部