1

我正在尝试通过 BLAST 解析几十个序列,在 Python 2.7 中使用 Bio.Blast 和 NCBIWWW。一个或几个序列没有问题,但 NCBIWWW.qblast() 总是在大约 5-7 次迭代 BLAST 搜索后停止。重要的是,程序不会因错误而崩溃和退出——它只是停止,并永远冻结。我必须手动退出应用程序。这也不是 Internet 连接的问题 - 没有错误表明这一点。

我不知道出了什么问题。我的代码中是否存在阻止多次 BLAST 搜索的错误,或者是否有用于此目的的替代算法?

我的代码:

    from Bio.Blast import NCBIWWW
    import urllib

    def load_uniprot_fasta(identifier): #loads fasta file for a given UniProt identifier
        link = "http://www.uniprot.org/uniprot/" + identifier + ".fasta"

        f = urllib.urlopen(link)
        content = f.read()
        print content
        print "\n"
        new_file = open(str(identifier)+".seq", "w")
        new_file.write(content)


    evalue = 0.00001

    id_list = open("list.list", "r") #this file is a list of UniProt identifiers, every line is a new identifier

    for line in id_list:

        uniprot_id = ""
        uniprot_id = str(line).strip("\n")
        load_uniprot_fasta(uniprot_id) #creates a <uniprot_id>.fasta file
        fasta_object = open(str(uniprot_id)+".seq").read()
        result_handle = NCBIWWW.qblast("blastp", "swissprot", fasta_object)
        print "SUCCESS\n"
4

1 回答 1

0

我没有看到您的代码有任何故意延迟——您是否阅读过NCBI BLAST 使用指南:

NCBI BLAST 服务器是共享资源。我们优先考虑交互式用户。...为避免出现问题,API 用户应遵守以下准则:

  • 联系服务器的频率不要超过每 10 秒一次。
  • 轮询任何单个 RID 的频率不要超过每分钟一次。
  • 使用 URL 参数 email 和 tool,以便 NCBI 可以在有问题时与您联系。
  • 如果将提交超过 50 个搜索,则在周末或东部时间平日晚上 9 点到凌晨 5 点之间运行脚本。

尽管NCBIWWW对于检查查询结果的频率有延迟机制,但我认为它不会增加查询之间的延迟。我并不是说这绝对是您的问题,但您可能超出了 NCBI 准则。我看到的关于这个问题的另一条建议:

不要提交仅包含单个序列的搜索!您需要批量查询并在单个搜索请求中提交一组。

于 2017-11-14T02:41:13.590 回答