关于python循环遍历优化 求助
需求:日志遍历,对应服务器日志中每个客户请求和应答时间统计首先把遍历关键词放入一个array的二维数组中
第一个循环把array中第i个取出,然后用这个去遍历日志中,任何含有该关键词的都取出来,存进一个list中
以下是部分的代码
for i in range(np.size(arr_os,0)):
recv_date = None
recv_time_str = None
print(arr_os)
for j in range(len(data_str)):
if arr_os in data_str and '' in data_str:
timedata3 = data_str
recv_time = timedata3# recv时间戳
recv_time_str = recv_time + ':' + recv_time + ':' + recv_time + '.' + recv_time
recv_date = timecalcu.trans_date_ms(recv_time_str)
continue
我需要遍历800万条的日志,内嵌的for循环中加了if。。。break等必要的判断去尽量减少遍历次数,但是耗时还是要很久,要24小时。请问各位大神有什么优化这种遍历的方法??
网上看的双循环优化方法都是针对类似于array,numba等计算类型的优化,我这个就单纯要遍历,然后取出字符串进行统计的。真的想不出办法,头秃了。求救啊 考虑将日志切片,然后多线程跑吧 醉红尘0 发表于 2021-7-5 18:02
考虑将日志切片,然后多线程跑吧
切片 多线程 王道 没有之一 上面切片多线程都说了,云玩家就你现在代码提三点吧
1、去掉print
2、arr_os data_str 这两个在内循环外直接定义变量赋值,不要做多次数组取值操作
3、不知道命中的日志是否很多,取时间、转换的方法有点low,效率不高。 如楼上,去掉print后,效果立竿见影。python的print效率最为诟病。
我没学过几天python,而且也不清楚你的文件数据结构,瞎说几句,你参考。
1. 如果有文本形大文件需要查找,我会优先考虑使用正则,因为效率真心最高。
2. 使用Python自带的filter函数,遍历的效率提高一大截。
3.尽量不要重复做同样的事,使用正则分组,遍历一次得到N个结果,减少遍历次数。或者我会遍历一次取出需要的数据集,再在得出的数据集中细分类,这比每次都在原始数据中遍历效率要高很多。
不太懂编程,供你参考。 for效率是很慢的,通常大数据都不用,洗数据用pandas 学到了,原来python的print那么耗费资源啊… 总结一下:
1、避免使用print
2、避免重复存取数组
3、分割数据、多线程遍历 算是经典问题,python处理大文件?
如果英文不错可以看看下面这个讨论
https://stackoverflow.com/questions/30294146/fastest-way-to-process-a-large-file
页:
[1]
2