Skip to main content
 首页 » 编程设计

python之加速python的请求函数

2025年05月04日23jiqing9006

我有一个脚本,它获取查询 ID 的列表文件并从 uniprot 中提取有机体和序列,该代码运行良好,但速度非常慢。我想通过它处理大约 400 万个序列,但解析 100 个序列需要大约 5 分钟:

real    5m32.452s 
user    0m0.651s 
sys 0m0.135s 

该代码使用了 python 的检索模块。我在网上读到我可以使用 .session() 属性,但是当我尝试这样做时,出现以下错误:

Traceback (most recent call last): 
File "retrieve.py", line 14, in <module> 
result = session.get(baseURL, payload) 
TypeError: get() takes exactly 2 arguments (3 given) 

代码列在这里:

import requests 
 
baseURL = 'http://www.uniprot.org/uniprot/' 
 
sample = open('sample.txt','r') 
out = open('out','w') 
 
for line in sample: 
    query = line.strip() 
    payload = { 
        'query': query,  
        'format':'tab', 
        'columns': 'id, entry_name, organism, sequence' 
    } 
    result = requests.get(baseURL, payload) 
    if result.ok: 
        out.write(query + '\t' + result.text[41:] + '\n') 

示例输入格式:

EDP09046 
ONI31767 
ENSFALT00000002630 
EAS32469 
ENSXETT00000048864 

示例输出格式:

EDP09046 R6X9 A0A251R6X9_PRUPE Prunus persica (Peach) (Amygdalus persica) MEENHAPALESIPNGDHEAATTTNDFNTHIHTNNDHGWQKVTAKRQRKTKPSKADSINNLNKLVPGVTIAGGEGVFRSLEKQSEDRRRRILEAQRAANADADSLAPVRSKLRSDDEDGEDSDDESVAQNVKAEEAKKSKPKKPKKPKVTVAEAAAKIDDANDLSAFLIDISASYESKEDIQLMRFADYFGRAFSAVTAAQFPWVKMFRESTVAKLADIPLSHISEAVYKTSVDWISQRSLEALGSFILWSLDSILADLASQVAGAKGSKKSVQNVSSKSQVAIFVVVAMVLRKKPDVLISILPTLRENSKYQGQDKLPVIVWAISQASQGDLAVGLHSWAHIVLPLVSGKGSNPQSRDLILQLAERILSTPKARTILVNGAVRKGERLVPPSAFEILIGVTFPAPSARVKATERFEAIYPTLKAVALAGSPRSKAMKQVSLQILSFAVKAAGESIPALSNEATGIFIWCLTQHADCFKQWDKVYQENLEASVAVLKKLSDQWKEHSAKLAPFDPMRETLKSFRHKNEKMLASGEDEAHQEKLIKDADKYCKTLLGKSSRGSGCKKSVALAVVALAVGAAVMSPNMESWDWDLEKLRVTISSFFD

任何人都可以建议我可以改进此代码以使其更快的一些方法吗?

提前致谢!

请您参考如下方法:

请求几乎总是所有网络代码中最慢的部分,因此您绝对希望对您的 ID 进行批处理。 Uniprot 有一个 batching capability in it's API .该页面上有一个 Perl 示例,应该可以帮助您入门——我会查看批大小限制是多少,然后以最大为起点(它可能比 4,000,000 小得多)。如 Uniprot 网站所述,还有一个 ID mapping service。这可能符合要求。