然后是執行快,它將你的程序并行利用系統的多核執行:
上圖:

grep 一個  1G 大小的log。

使用parallel  ,和不使用parallel直接grep。結果顯而易見,相差 20 倍。這比用啥 ack,ag優化效果明顯多了。

備注:這是在一個48 核服務器上執行的結果。

how

最簡單的方法就是類比xargs。在xargs里面有一個參數 -P,可以利用多核。

舉個例子:

$ time echo {1..5} |xargs -n 1 sleep

real 0m15.005s
user 0m0.000s
sys 0m0.000s

這一條xargs把每個echo的數作為參數傳給sleep ,所以一共sleep了 1 2 3 4 5=15秒。

如果使用 -P 參數分給5個核,每個核各sleep 1,2,3,4,5秒,所以執行完之后總共sleep的5秒。

$ time echo {1..5} |xargs -n 1 -P 5 sleep

real 0m5.003s
user 0m0.000s
sys 0m0.000s

鋪墊結束。一般情況下,parallel的第一種模式,就是替換掉 xargs -P.

比如壓縮一下所有的html文件。

find . -name \\\'*.html\\\' | parallel gzip --best

傳參數模式

第一種模式是利用 parallel傳參數。管道前面進來的作為參數傳給后面的命令,并行執行

比如

huang$ seq 5 | parallel echo pre_placehoder_{}
pre_placehoder_1
pre_placehoder_2
pre_placehoder_3
pre_placehoder_4
pre_placehoder_5

其中{}是占位符,用來占位傳入參數的位置。

在云計算操作中,經常有批量操作,比如建立10個云硬盤

seq 10 | parallel cinder create 10 --display-name test_{}

建立50個云主機

復制代碼 代碼如下:seq 50 | parallel nova boot –image    image_id  –flavor 1 –availability-zone  az_id   –nic vnetwork=private   –vnc-password 000000  vm-test_{}

批量刪除云主機

nova list | grep some_pattern| awk \\\'{print $2}\\\' | parallel nova delete

改寫 for loop

可以看到,我其實是把很多需要寫循環的地方用parallel替換了,順帶享受了并行帶來的快捷。
這個道理是這樣的,在進行for循環的時候,是最有可能并行化的,因為被放在循環中的各個對象是上下文無關的。

普世抽象,shell的循環:

 (for x in `cat list` ; do
 do_something $x
 done) | process_output

可以直接寫成

 cat list | parallel do_something | process_output

如果loop 里面內容太多了

 (for x in `cat list` ; do
 do_something $x
 [... 100 lines that do something with $x ...]
 done) | process_output

那么最好寫成一個腳本

 doit() {
 x=$1
 do_something $x
 [... 100 lines that do something with $x ...]
 }
 export -f doit
 cat list | parallel doit

而且還能避免掉很多麻煩的轉義。

–pipe模式

另一種模式就是 parallel –pipe

這時管道前面的不是作為參數,而是標準輸入傳給后面的命令

例如:

cat my_large_log |parallel --pipe grep pattern 

如果不加 –pipe ,相當于 mylog中的每一行都變成 grep pattern line的命令展開了。而加入了–pipe,則和 cat mylog | grep pattern  沒有區別,只是分配到各個核上去執行了。

好了,基本概念就講完了!其他的都只是各個參數具體使用,比如到底用幾個核啊,place_holder的替換啊,各種花樣傳參數啊,并行執行但是保證結果順序輸出(-k),以及神奇的跨節點并行計算啊,看看man page就知道了。

bonus

手邊有了一個轉換成并行的小工具,除了讓你日常執行快一點之外,還有一個好處,就是測并發。

很多接口在并發操作下會出現一些bug,比如有一些判斷數據庫里面沒有加鎖,是在代碼層面判斷的,結果并發請求下去,每個請求在到達服務器的時候是判斷通過,一起寫了之后就超出限制了。之前寫for循環因為是串行執行的,并不會觸發這些問題。但是你要真正測并發的話,又要寫腳本,或者利用python的mulitiprocessing封裝一下。但我手邊有了parallel,又在bashrc里面就加了以下兩個alias

alias p=\\\'parallel\\\'
alias pp=\\\'parallel --pipe -k\\\' 

這樣制造并發太方便了,只需要管道后面加個p , 我就時時刻刻可以制造并發來觀察響應。

舉個例子

seq 50 | p -n0 -q curl \\\'example.com\\\'

以你核的個數并發請求。-n0的意思是seq輸出不作為參數傳給后面的命令。

八卦時間:gnu界的祥林嫂

作為一個自由軟件八卦愛好者,每次我發現一個新奇的軟件總會去 google一下 關鍵詞 site:https://news.ycombinator.com關鍵詞 site:http://www.reddit.com/。看看風評如何,并且往往還能在討論中有意外收獲。

然后我再hacker news上看到了一段吐槽,主要就是說每次觸發執行parallel都會彈出一段文字和你說,要是你把這個工具用在學術上的話(很多生命科學相關的都在用這個工具的),要引用他的論文,不然的話你就付他10000歐元吧。我因此學到一個詞,叫Nagware,特指通過啰啰嗦嗦像唐僧那樣煩你要你付錢的軟件。雖然我認為真用到了的確也應該引用一下文章,但是,如同這位同學說的:

I agree it\\\’s a great tool, except for the nagware messages and their  content. Imagine if the author of cd or ls had the same attitude…

另外,該作者真是灰常喜歡別人引用他的軟件,以致于在NEWS里面我還看到了:

原理時間

直接摘抄一下作者在 stackoverflow 的回答

GNU Parallel is a general parallelizer and makes is easy to run jobs in parallel on the same machine or on multiple machines you have ssh access to.

If you have 32 different jobs you want to run on 4 CPUs, a straight forward way to parallelize is to run 8 jobs on each CPU:

GNU Parallel instead spawns a new process when one finishes – keeping the CPUs active and thus saving time:

結論

本文主要安利了一個 真 – 并行 工具,解釋了其主要的兩種模式,附贈了一個技巧,八卦了gnu界不為人知的另一面。希望對你有用。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持三五互聯

更多關于云服務器域名注冊,虛擬主機的問題,請訪問三五互聯官網:m.shinetop.cn

贊(0)
聲明:本網站發布的內容(圖片、視頻和文字)以原創、轉載和分享網絡內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。郵箱:3140448839@qq.com。本站原創內容未經允許不得轉載,或轉載時需注明出處:三五互聯知識庫 » 15分鐘并行神器gnu parallel入門指南

登錄

找回密碼

注冊

主站蜘蛛池模板: 日韩有码中文字幕国产| 亚洲永久精品ww47永久入口| 国产精品一区二区三区黄| 老熟妇仑乱一区二区视頻| www久久只有这里有精品| 國产AV天堂| 性欧美丰满熟妇xxxx性| 黑人巨茎大战白人美女| 东方四虎在线观看av| 熟女性饥渴一区二区三区| 亚洲综合无码明星蕉在线视频| 亚洲中文字幕无码永久在线 | 高清dvd碟片 生活片| 呈贡县| 免费国产一级特黄aa大片在线| 日韩人妻精品中文字幕专区| 国产香蕉久久精品综合网| 日韩国产成人精品视频| 国产精品无码无卡在线播放| 卓尼县| 口爆少妇在线视频免费观看| 国语精品国内自产视频| 日本一区二区三深夜不卡| 无码人妻精品一区二| 山西省| 91热在线精品国产一区| 国产高清视频一区二区乱| 国色精品卡一卡2卡3卡4卡在线| 亚洲深夜精品在线观看| 尤物国产精品福利在线网| 国产一区二区三区美女| 欧美成人精品手机在线| 无码人妻一区二区三区在线视频| 宁化县| 亚洲国产一区二区精品专| 亚洲中文字幕综合小综合| 好男人视频www在线观看| 22222se男人的天堂| 亚洲第一区二区快射影院| 亚洲色大成网站WWW久久| 2021亚洲爆乳无码专区|