為什麼 Biopython 的在線 BLAST 這麼慢?

2020-11-29 史提芬先生

用過網頁版本 BLAST 的童鞋都會發現,提交的序列比對往往在幾分鐘,甚至幾十秒就可以得到比對的結果;而通過調用 API 卻要花費幾十分鐘或者更長的時間!這到底是為什麼呢?

NCBIWWW 基本用法

首先,我們來看一下提供了基於 API 在線比對的 Biopython 模塊。

Biopython 中的 BLAST 提供了 over the Internet 和 locally 兩種選擇:

Bio.Blast.NCBIWWW 主要是基於 NCBI BLAST API 用於在線比對Bio.Blast.Applications 模塊則是調用本地安裝好的 BLAST 程序以及資料庫執行比對。

在這裡我們來重點看一下 Bio.Blast.NCBIWWW 。Bio.Blast.NCBIWWW 模塊中主要是通過 qblast() 函數來調用 BLAST 的在線版本。它具有三個非可選參數:

第一個參數是用於搜索的 blast 程序,為小寫字符串。目前,qblast(biopython==1.7.4)僅適用於 blastn,blastp,blastx,tblast 和 tblastx。第二個參數指定要搜索的資料庫。關於這個選項,在 NCBI Guide to BLAST 上有詳細的描述。第三個參數是包含查詢序列的字符串。這可以是序列本身,也可以是 fasta 格式的序列,或者是諸如 GI 號之類的標識符。

qblast 函數還接受許多其他選項參數,這些參數基本上類似於我們可以在 BLAST 網頁上設置的不同參數。我們在這裡只重點介紹其中一些:

參數 url_base 是設置用於在 Internet 上運行 BLAST 的基本 URL。默認情況下,它連接到 NCBI(即 url_base='https://blast.ncbi.nlm.nih.gov/Blast.cgi'),但是可以使用它連接到雲端運行的 NCBI BLAST 實例。更多詳細信息請參閱 qblast 功能的文檔。qblast 函數可以返回各種格式的 BLAST 結果,您可以使用可選的format_type 關鍵字進行選擇:「HTML」,「Text」,"ASN.1」 或 "XML"。默認值為 「XML」,因為這是解析器期望的格式。參數 expect 用於設置期望值或 e-value 閾值。

有關可選的 BLAST 參數的更多信息,請參考 NCBI 自己的文檔或 Biopython 內置的文檔:

請注意,NCBI BLAST 網站上的默認設置與 qblast 上的默認設置不太相同。如果獲得不同的結果,則需要檢查參數(例如,e-value 值和 gap 值)。

例如,如果您要使用 BLASTN 在核苷酸資料庫(nt)中搜索核苷酸序列,並且知道查詢序列的 GI 號,則可以使用:

另外,如果我們的查詢序列已經存在於 FASTA 格式的文件中,則只需打開文件並以字符串形式讀取此記錄,然後將其用作查詢參數:

我們還可以將 FASTA 文件作為 SeqRecord 對象進行讀取,然後僅提供序列本身進行比對:

僅提供序列意味著 BLAST 將自動為您的序列分配一個標識符。您可能更喜歡使用 SeqRecord 對象的 format 方法來製作 FASTA 字符串(其中將包含現有標識符):

無論給 qblast() 函數提供什麼參數,都應在 handle 對象(默認為 XML 格式)中返回結果。下一步是將 XML 輸出解析為表示搜索結果的 Python 對象,但是您可能想先保存輸出文件的本地副本。在調試從 BLAST 結果中提取信息的代碼時,我發現這特別有用(因為重新運行在線搜索速度很慢,並且浪費了 NCBI 計算機時間)。

我們需要小心一點,因為我們只能使用 result_handle.read() 讀取一次 BLAST 輸出——再次調用 result_handle.read() 會返回一個空字符串。

完成上面的操作後,結果將保存在文件 my_blast.xml 中,並且原始句柄已提取了所有數據(因此我們將其關閉了)。但是,BLAST 解析器的解析功能採用了類似於文件句柄的對象,因此我們可以打開保存的文件進行輸入:

現在我們已經將 BLAST 結果重新放回了句柄中,下一步,如果我們準備對它們進行處理,我們可以參考 Biopython 中 Parsing BLAST output 部分的內容,這裡不再說明。

NCBIWWW 實現

在了解 NCBIWWW 的實現前,我們先來看一下 NCBI BLAST 對於 API 使用的一些說明:

NCBI BLAST 伺服器是共享資源。為了確保整個社區都能使用該服務,他們可能會限制某些高流量用戶的搜索。他們會將在 24 小時內提交 100 次以上搜索的用戶的搜索移到較慢的隊列中,或者在極端情況下將阻止請求。 NCBI BLAST 優先考慮互動的用戶,通過網絡瀏覽器的 NCBI 網頁的交互式用戶不會遇到以上的問題。

對於 API 的使用準則:

與伺服器聯繫的頻率不要超過每 10 秒一次。不要輪詢每一個 RID(Request ID) 多於一分鐘一次。使用 URL 參數電子郵件和工具,以便 NCBI 在出現問題時可以與您聯繫。如果將提交超過 50 個搜索,則在周末或東部時間東部時間晚上 9 點至凌晨 5 點之間運行腳本。

我們再來看一下 NCBIWWW 在源碼層面的處理:

可以看到 NCBIWWW 從 20 秒的延遲開始,然後開始每隔一分鐘執行一次 request 輪詢,直至任務完成或者任務出現異常。

所以,總的來說,NCBI BLAST API 的使用準則,加上 NCBI BLAST 對用戶請求的任務隊列處理,甚至 NCBI BLAST 伺服器共享資源的限制,以及總用戶請求數,這些都可能成為 NCBIWWW.qblast() 異常耗時的原因,這其中還不算個人伺服器的網絡影響。綜上種種原因,如果考慮使用 NCBIWWW.qblast() 執行頻繁的序列在線批處理,或許不是一個好的解決方案。

最後,基於 Python 的 NCBI BLAST 在線批處理,如果你有更好的方法,歡迎留言交流。

相關焦點

  • 序列比對在biopython中的處理
    序列比對是生物信息學分析中的常見任務,包含局部比對和全局比對兩大算法,局部比對最經典的代表是blast, 全局比對則用於多序列比對。在biopython中,支持對序列比對的結果進行讀寫,解析,以及運行序列比對的程序。
  • biopython簡介
    biopython和bioperl, biojava項目類似,都是Open Bioinformatics Foundation組織的項目之一,旨在提供一個編程接口,方便生物信息數據的處理。
  • 應用BioPython解析和可視化蛋白質的結構
    BioPython模塊的安裝首先,在終端下安裝BioPython模塊:pip install biopython經過一些提示BioPython即刻安裝完成。這裡多說一句,由於國內應用pip安裝模塊很慢,如果想要高速安裝,可以選用清華大學的鏡像,即清華大學的tuna鏡像。
  • 使用biopython可視化染色體和基因元件
    在biopython中,通過BiolGraphics子模塊可以對基因組結構進行可視化,支持線性和圈圖兩種可視化方式。 除了圈圖之外,biopython還可以繪製染色體圖。
  • 20款經典生物在線工具匯總
    網址:https://blast.ncbi.nlm.nih.gov/Blast.cgi功能:準確度高,速度慢的多序列比對網址:http://www.ebi.ac.uk/Tools/msa/tcoffee/
  • Biopython —— 你不知道的 NCBI 訪問方式
    介紹Biopython 是由 Python 編寫的一組免費可用的計算生物學工具,解決一些生物信息學需求。Biopython 致力於通過創造高質量和可重複利用的 Python 模塊及類,使 Python 在生物信息學中的應用變得更加容易。
  • Python能幹什麼?為什麼會這麼火
    為什麼會這麼火?那麼Python能幹什麼呢?1.網站後端程式設計師:使用它單間網站,後臺服務比較容易維護。Python課程為什麼會這麼火呢?因為Python簡單明了,非常容易上手。對於新手或者初學者來說,Python是非常容易學習和使用的,最容易學習的程式語言之一。部分原因是因為它簡化了語法,更加貼近於自然語言,可以讓Python代碼更加快速的執行。
  • 新手上路,一文秒懂Blast結果圖(附序列比對網址)
    其中,Expect(E值)、Identities(一致性)、Gaps(缺失或插入)三項是評價blast結果的標準。E值接近零或者為零時,具體上就是完全匹配了;一致性:匹配上的鹼基數佔總序列長的百分數。
  • From water droplets onplant leaves to blast furnace technology
    報告題目:From water droplets onplant leaves to blast furnace technology報告人:Wilfried Konrad主持人(邀請人):王國勇 教授報告時間:12月7日18:00-20:00報告地點:南嶺校區機械材料館209學術報告廳
  • Python為什麼這麼火?小孩子適合學習python編程嗎?
    原因三:應用廣泛感覺這麼說不夠嚴謹,應該說「應用極為廣泛」才對得起這門明星語言。它可以用來管理SQL的資料庫嗎?可以。可以用來管理雲端或者本地基礎設置嗎?OK的。可以用來開發網站嗎?問題不大。可以用來構建一個小工具嗎?必須的。可以用來…嗎?別問,問就是可以做到。
  • 一文秒懂Blast結果圖(附序列比對網址)!教你快速上手,絕對實用!
    其中,Expect(E值)、Identities(一致性)、Gaps(缺失或插入)三項是評價blast結果的標準。E值接近零或者為零時,具體上就是完全匹配了;一致性:匹配上的鹼基數佔總序列長的百分數。功能:準確度高,速度慢的多序列比對網址:http://www.ebi.ac.uk/Tools/msa/tcoffee/
  • 為什麼大腦反應這麼慢呢? 大腦運算機制是怎麼樣的?
    為什麼大腦反應這麼慢呢? 大腦運算機制是怎麼樣的?時間:2017-08-01 13:02   來源:《大科技》雜誌   責任編輯:沫朵 川北在線核心提示:原標題:為什麼大腦反應這麼慢呢? 大腦運算機制是怎麼樣的? 在世界金融中心的紐約股票交易中心,有一臺自動金融交易機。
  • Igblast的安裝與使用
    下載並解壓igblast,並檢查文件的md5mkdir igblast && cd igblast# 下載安裝包wget ftp://ftp.ncbi.nih.gov/blast/executables/igblast/release/1.8.0/ncbi-igblast-1.8.0-x64-linux.tar.gz#
  • 代碼跑得慢甩鍋Python?手把手教你如何給代碼提速30%
    其實某個特定程序(無論使用何種程式語言)的運行速度是快還是慢,在很大程度上取決於編寫該程序的開發人員自身素質,以及他們編寫優化而高效代碼的能力。Medium上一位小哥就詳細講了講如何讓python提速30%,以此證明代碼跑得慢不是python的問題,而是代碼本身的問題。
  • python基礎教程之python是什麼?
    這是最近10年最常用的10種程式語言的變化圖:python是什麼--python的功能總的來說,這幾種程式語言各有千秋。第一個缺點就是運行速度慢,和C程序相比非常慢,因為Python是解釋型語言,你的代碼在執行時會一行一行地翻譯成CPU能理解的機器碼,這個翻譯過程非常耗時,所以很慢。而C程序是運行前直接編譯成CPU能執行的機器碼,所以非常快。但是大量的應用程式不需要這麼快的運行速度,因為用戶根本感覺不出來。
  • 為什麼光速會這麼慢?
    光速 明明 是宇宙中最快的,怎麼會說它慢呢?真空中的光速達299,792,458米/秒,宇宙中沒有任何具有靜止質量的物體速度比它更快,我們這個宇宙的基礎就建立在這個速度之上,假如有什麼東西超過這個極限,宇宙可能就會轟然坍縮或者分崩離析。但沒有人會滿足於這個速度,科學家們已經證明,只要超過這個速度,我們就可以通過時間旅行回到過去,做我們夢寐以求想做的事。
  • 常用在線序列比對工具
    常用的在線序列比對工具主要由EMBL-EBI提供,包括但不限於Needle, Water, Clustal Omega, Muscle, Mafft, T-coffee等,以及NCBI提供的blast2seq工具;常用的序列相似性搜索工具有NCBI提供的BLAST、UCSC提供的BLAT等。EMBL-EBI與NCBI同時期也開發了一套序列相似性搜索工具FASTA,然後最終沒能流行起來。
  • python是什麼:Python相關內容了解
    今天來聊聊一篇關於python是什麼:Python相關內容了解的文章,現在就為大家來簡單介紹下python是什麼:Python相關內容了解,希望對各位小夥伴們有所幫助。第一個缺點就是運行速度慢,和C程序相比非常慢,因為Python是解釋型語言,你的代碼在執行時會一行一行地翻譯成CPU能理解的機器碼,這個翻譯過程非常耗時,所以很慢。而C程序是運行前直接編譯成CPU能執行的機器碼,所以非常快。但是大量的應用程式不需要這麼快的運行速度,因為用戶根本感覺不出來。
  • Blast at kindergarten gate wreaks havoc
    It was not yet known late Thursday what caused the blast and there was no clear information on the identities of the dead and injured, the statement said.