问题遇到的现象和发生背景
有一个90G的文件,大概有16亿行。
现在要对这个文件的每一行进行处理,但是readlines太慢了。
1.首先想到的是多线程,但是似乎写入文件的时候有些问题
2.然后又看到了分割处理,分割之后不需要合并
但是那些教程越看,脑子越乱。之前也没有接触过python的这些知识。
用代码块功能插入代码,请勿粘贴截图
这个是主要的处理函数,串行处理,很慢,预计需要8天才能处理完,这个函数里还调用了一个函数(没有放)
def write_res():
# ncbi.update_taxonomy_database()
fw = open(output_file,"w")
with open(input_file,"r") as fr:
lines = fr.readlines()[1:]
for line in lines:
species = line.strip().split("\t")
pid = species[0] #文件的pid
tid = species[1] #文件的tid
sna = ncbi.get_taxid_translator([tid]) #获取tid对应的物种名,字典类型
if int(tid) in sna: #判断,可无
sn = sna[int(tid)] #提取物种名
sn1 = sn.split()
if len(sn1) > 1: #简化物种名
sn = sn1[0] + "_" + sn1[1][0:2]
else:
sn = sn1[0]
rn = get_rank(tid,"phylum") #调用函数获取rank
# print(pid,tid,sn,rn)
# print("%s@@%s-%s-%s\n"%(pid,tid,sn,rn))
fw.write("%s@@%s-%s-%s\n"%(pid,tid,sn,rn))
else:
# print(pid,tid,"na","na")
print("%s@@%s-%s-%s\n"%(pid,tid,"other","other"))
fw.write("%s@@%s-%s-%s\n"%(pid,tid,"other","other"))
fw.close()
运行结果及报错内容
非常慢。想要多线程、并行、分割等任意一种方法让它跑的快一点。
在服务器(最多大概可以30个线程)上跑
我的解答思路和尝试过的方法
之前用的是shell,虽然比现在的pyhton快很多,但是有的数据会找错。所以改用python。
搜了多线程的教程。越看越乱。
我想要达到的结果
想要多线程、并行、分割文件(不需要再合并到一起)等任意一种方法让它跑的快一点。