Ⅰ 用python处理一个1G左右的数据集,运行速度非常慢,怎样优化
给你几点个人的建议哈:
考虑拿C或C++重写.
考虑并行搞,找个hadoop集群,写成maprece程序跑 放在hadoop上跑,更多数据都不怕.
考虑升级机器,多搞点内存,然后东西尽量放在内存里搞.
考虑程序优化.
希望可以帮助到你哦,这只是我的一个建议哈!
Ⅱ 如何解决Python读取pdf内容慢的问题
1,引言
晚上翻看《Python网络数据采集》这本书,看到读取PDF内容的代码,想起来前几天集搜客刚刚发布了一个抓取网页pdf内容的抓取规则
如果PDF文件在你的电脑里,那就把urlopen返回的对象pdfFile替换成普通的open()文件对象。
3,展望
这个实验只是把pdf转换成了文本,但是没有像开头所说的转换成html标签,那么在Python编程环境下是否有这个能力,留待今后探索。
4,集搜客GooSeeker开源代码下载源
1.GooSeeker开源Python网络爬虫GitHub源
5,文档修改历史
2016-05-26:V2.0,增补文字说明
2016-05-29:V2.1,增加第六章:源代码下载源,并更换github源的网址
Ⅲ 使用python编程处理大量数据,效率太慢怎么解决
既然存有上千万个数据,为什么不使用数据库呢?
使用小型的sqlite数据库,加上适当的索引、筛选,肯定能大大提高数据处理速度。
python也自身带有处理sqlite数据库的模块,极其方便。
Ⅳ 用python编程读取TXT时,数据大概有1千万条,速度很慢如何解决
两种可选的方式
1:使用yield的懒惰加载,示例代码如下:
123456789101112
def read_in_chunks(file_object, chunk_size=1024): """Lazy function (generator) to read a file piece by piece. Default chunk size: 1k.""" while True: data = file_object.read(chunk_size) if not data: break yield data f = open('really_big_file.dat')for piece in read_in_chunks(f): process_data(piece)
2:使用iter和一个帮助方法:
123456
f = open('really_big_file.dat')def read1k(): return f.read(1024) for piece in iter(read1k, ''): process_data(piece)
推荐使用第一个。
Ⅳ python 处理大数据程序运行的越来越慢的问题
最近编写并运行了一个处理1500万个数据的程序,本来最初每秒可以处理150个左右的数据,预计大概15个小时的时间就可以处理完,晚上的时候就开始运行,本以为等到第二天中午就可以得到结果呢,,,
可是,等我第二天的时候一看,什么???还没处理完,当前的数据处理速度变成了一秒5个左右,然后还需要等待300个小时。
然后就查了一下这个问题,原来同样也有很多人在处理大数据的时候遇到了这个问题,大多数的文章分析的原因都是说由于GC(垃圾回收)造成的性能下降。
Python的垃圾回收机制的工作原理为每个对象维护一个引用计数,每次内存对象的创建与销毁都必须修改引用计数,从而在大量的对象创建时,需要大量的执行修改引用计数操作,对于程序执行过程中,额外的性能开销是令人可怕的。回收的触发时机有两种可能,一是用户主动调用gc.collect(),二是对象数量超过阈值。
所以正是GC拖慢了程序的性能,所以我们可以考虑在处理的时候禁止垃圾回收。
通过这样的改进之后速度确度会有很大的提升。但是又有也会另外的一个问题,内存溢出,由于运行的过程中生成大量的对象,一次使用后就没有了引用,由于关闭了垃圾回收机制,一直存在内存中得不到清理,然后程序的内存使用量越来越大。解决的方法就是定期打开gc.enable()再关闭或者主动调用gc.collect(),这样就可以了。
通过上述的改进后程序确实了很多,可是我的程序还是运行的越来越慢,我都怀疑人生了,然后分别测试了各个步骤所花费的时间才知道了原因,我使用了pandas创建一个DataFrame,然后每次迭代得到的结果都添加新的数据到DataFrame中,随着里边的数据越来越多,添加的速度也就越来越慢了,严重的拖累的运行速度。这里的解决方法有两个:
1 分段保存结果,间隔一段时间就保存一次结果,最后再将多次的结果合并。
2 换一个数据存储方法,我是直接使用了python的字典进行保存结果,它随着数据的增多添加的速度也会变慢,但是差别不是很大,在可接受的范围内,可以使用;或者再加上方法1,分段进行保存再合并也是可以的。
Ⅵ python在一个循环中处理数据,越来越慢,求教
要么开多线程,要么用C/C++或python数组的语法特征处理循环,没代码没法判断,要是用原生的python代码处理循环当然慢。