在生信公司里,有相當一部分人都是負責編寫流程和維護流程。
流程pipeline,就是讓用戶(前端)在填寫配置文件后能夠一鍵運行的腳本,最終自動得出結果,並生成報告,有的公司還會將結果上傳。
自動化pipeline必須具備的功能:
- 讀取配置文件,生成相應的待執行的腳本
- 按照先后邏輯關系依次向集群投遞任務
- 能將大任務分割成小的任務,並行執行,縮短項目周期
必須使用的工具:
- 一門腳本語言,Shell、Perl 或 Python
- 集群調度系統工具,SGE 或 monitor
- 工具必須都使用絕對路徑,因為這腳本是給同部門的人用的,如果你要提高可移植性,可以將工具路徑寫到配置文件里。
- 寫流程前,最好先畫出 pipeline 的分析流程圖
- 配置好軟件工具及庫的路徑
首先所有的模塊生成都是使用了一個腳本:
sh run.sh
腳本內容為:
perl generate.pl -conf XX.conf -list sample.list -outdir result
執行后, 會在本地生成所有的框架.
最終前端只需要執行result里的一個腳本就可以了:
sh qsub.sh
腳本里的內容:
monitor taskmonitor <Grid set> -i qsub.conf
配置文件conf里的內容:
<script 1>:<mem> <script 2>:<mem> <script 1>:<mem> <script 3>:<mem> <script 3>:<mem> <script 4>:<mem>
是monitor准備的待執行腳本, 包含了腳本的執行邏輯, 以及每個腳本執行時所需的內存.
看了別人的流程, 發現都不夠完美, 因為我不熟悉面向對象的編程思想, 但我對模塊化編程思想的理解已經非常深刻了, 我覺得一個好的流程一定得模塊化, 各個功能之間相互獨立, 大問題划分為小問題, 這樣在寫代碼、調試和以后流程修改時就非常簡單和方便了,效率大大的提高了,別人要干一個季度的事,我一個月就可以搞定。