生信小技巧:并行運行的秘密

生信學習入門后,我們都掌握了如何在后臺運行命令夏跷。一般我們可以通過for loop哼转,將一系列的命令逐一運行。但是這樣的運行方式槽华,效率比較低壹蔓,服務器很多線程都沒有被用上。另外如果你要運行成百上千的命令猫态,這將會耗費你很多很多的運行時間佣蓉。

那如何解決這個問題呢,今天給大家介紹一下并行運行的工具GNU-Parallel亲雪。

工具簡介和安裝

GNU parallel是一種Shell工具勇凭,用于使用一臺或多臺計算機并行執(zhí)行作業(yè)。作業(yè)可以是單個命令义辕,也可以是每一行運行的小腳本虾标。典型的輸入是文件列表。

下面進行安裝:

wget http://ftp.gnu.org/gnu/parallel/parallel-latest.tar.bz2
tar xjf parallel-latest.tar.bz2
cd parallel-20200222
./configure
make install

基本用法

首先看看一個例子

###輸入
seq 1 5 | parallel -j 4 echo
###輸出
1
2
3
4
5

在這里灌砖,我們首先打印從1到5的數(shù)字序列璧函,然后將此數(shù)據(jù)通過管道傳遞到parallel。我們提供了echo將在-j=4四個作業(yè)之間并行運行基显。

我們最常使用的方式是蘸吓,將需要運行的命令寫到一個文本里,具體格式是每行一個你需要執(zhí)行的命令:

parallel -j 18 cmd.list

如果我們只想輸出運行的命令撩幽,看看它是否符合我們的期待库继,可以使用--dry-run選項:

###輸入
seq 1 5 | parallel --dry-run -j 4 echo
###輸出
echo 3
echo 4
echo 5
echo 2
echo 1

可以看到結(jié)果并不是按照數(shù)字的順序來展示的,因為所有運行的命令都花費相同的時間窜醉,通常輸出時候都是以不同順序輸出的制跟。我們可以使用-k選項,強制其按照先進先出就行輸出:

seq 1 5 | parallel -k --dry-run -j 4 echo

echo 1
echo 2
echo 3
echo 4
echo 5

關(guān)于 -j的一些用法:

parallel -j 100% # 使用全部100%的線程
parallel -j -1 # 使用總線程減一的線程數(shù)

如何使用:::

:::可以用來替代管道酱虎,比如:

#原命令
seq 1 5 | parallel -j 4 -k echo
#替代命令
parallel -j 4 -k echo ::: `seq 1 5`

:::還可以使用文件中的內(nèi)容作為運行的輸入變量:

### 在文件中包含著一行一個的輸入變量
cat my_args.txt
1
2
3
4
5
###輸入命令
parallel -j 4 -k echo :::: my_args.txt
###輸出結(jié)果
1
2
3
4
5

另外如果你需要輸入多個參數(shù)雨膨,可以使用:::::::,將參數(shù)進行組合《链看看具體例子:

#輸入命令
parallel --dry-run -k -j 4 Rscript run_analysis.R {1} {2} ::: `seq 1 2` ::: A B C
#輸出結(jié)果
Rscript run_analysis.R 1 A
Rscript run_analysis.R 1 B
Rscript run_analysis.R 1 C
Rscript run_analysis.R 2 A
Rscript run_analysis.R 2 B
Rscript run_analysis.R 2 C

Parallel與functions結(jié)合

在某些情況下聊记,您想執(zhí)行一系列命令撒妈。例如,下面的代碼計算DNA互補序列的ATCG數(shù)排监。

echo "ATTA" |  tr ATCG TAGC | \
    python -c "import sys; o=sys.stdin.read().strip(); print(o, o.count('T'), o.count('G'), o.count('C'), o.count('A'))"

使用該function有兩個操作:

###定義好函數(shù)
function count_nts {
    # $1 is the first argument passed to the function
    echo $1 | tr ATCG TAGC | \
    python -c "import sys; o=sys.stdin.read().strip(); print(o, o.count('T'), o.count('G'), o.count('C'), o.count('A'))"
}

# export函數(shù)
export -f count_nts
###執(zhí)行parallel
parallel -j 4 count_nts ::: TAAT TTT AAAAT GCGCAT | tr ' ' '\t'

今天的介紹就到這里結(jié)束了狰右,Parallel是一個很強大的工具,只要使用好它舆床,會讓你數(shù)據(jù)分析運行的速度棋蚌,事半功倍。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挨队,一起剝皮案震驚了整個濱河市谷暮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盛垦,老刑警劉巖湿弦,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異腾夯,居然都是意外死亡颊埃,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門蝶俱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來班利,“玉大人,你說我怎么就攤上這事榨呆》拾埽” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵愕提,是天一觀的道長。 經(jīng)常有香客問我皿哨,道長浅侨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任证膨,我火速辦了婚禮如输,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘央勒。我一直安慰自己不见,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布崔步。 她就那樣靜靜地躺著稳吮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪井濒。 梳的紋絲不亂的頭發(fā)上灶似,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天列林,我揣著相機與錄音,去河邊找鬼酪惭。 笑死希痴,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的春感。 我是一名探鬼主播砌创,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鲫懒!你這毒婦竟也來了嫩实?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤刀疙,失蹤者是張志新(化名)和其女友劉穎舶赔,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谦秧,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡竟纳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了疚鲤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锥累。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖集歇,靈堂內(nèi)的尸體忽然破棺而出桶略,到底是詐尸還是另有隱情,我是刑警寧澤诲宇,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布际歼,位于F島的核電站,受9級特大地震影響姑蓝,放射性物質(zhì)發(fā)生泄漏鹅心。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一纺荧、第九天 我趴在偏房一處隱蔽的房頂上張望旭愧。 院中可真熱鬧,春花似錦宙暇、人聲如沸输枯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桃熄。三九已至,卻和暖如春型奥,著一層夾襖步出監(jiān)牢的瞬間蜻拨,已是汗流浹背池充。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缎讼,地道東北人收夸。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像血崭,于是被迫代替她去往敵國和親卧惜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345