python 处理大数据程序运行的越来越慢的问题

python 处理大数据程序运行的越来越慢的问题,第1张

最近编写并运行了一个处理1500万个数据的程序,本来最初每秒可以处理150个左右的数据,预计大概15个小时的时间就可以处理完,晚上的时候就开始运行,本以为等到第二天中午就可以得到结果呢,,,

可是,等我第二天的时候一看,什么???还没处理完,当前的数据处理速度变成了一秒5个左右,然后还需要等待300个小时。

然后就查了一下这个问题,原来同样也有很多人在处理培察蔽大数据的时候遇到了这个问题,大多数的文章分析的原因都是说由于GC(垃圾回收)造成的性能下降。

Python的垃圾回收机制的工作原理为每个对象维护一个引用计数,每次内存对象的创建与销毁都必须修改引用计数,从而在大量的对象创建时,需要大量的执行修改引用计数 *** 作,对于程序执行过程中,额外的性能开销是令人可怕的。回收的触发时机有两种可能,一是用户主动调用gc.collect(),二是对象数量超过阈值。

所以正是GC拖慢了程序的性能,所以我们可以考虑在处理的时候禁止垃圾回收。

通过这样的改进之后速度确度会有很大的提升。但是又有也会另外的一个问题,内存溢出,由于运行的过程中生成大量的对象,一次使用后就没有了引用,由于关闭了垃圾回收机制,一直存在内存中得不到清理,然后程序的内存使用量越来越大。解决的方法就是定期打开gc.enable()再关配州闭或者主动调用gc.collect(),这样就可以了。

通过上述的改进后程序确实了很多,可是我的程序还是运行的越来越慢,我都怀疑人生了,然后分别测试了各个步骤所花费的时间才知道了原因,我使用了pandas创建一个DataFrame,然后每次迭代得到的结果都添加新的数据到DataFrame中,随着里边的数据越来越多,添加的速度也就越来越慢了,严重的拖累的运行速度。这里的解决方法有两个:

1 分段保存结果,间隔一段时间就保存一次结果,最后再将多次的结果合并。

2 换一个数据存储方法,我是直接使用了python的没和字典进行保存结果,它随着数据的增多添加的速度也会变慢,但是差别不是很大,在可接受的范围内,可以使用;或者再加上方法1,分段进行保存再合并也是可以的。

python可以处理大数据,python处理大数据不一定是最优的选择。适合大数据处理。而不是大数据量处理。 如果大数据量处理,需要采用并用结构,比如在hadoop上使用python,或者是自己做的分布式处理框架。

python的优势不在于运行效率,而在于开发效率和高可维护性。针对特定的问题挑选合适的工具,本身也是一项技术能力。

Python处理数据的优势(不是处理大数据):

1. 异常快捷的开发速度,代码量巨少

2. 丰富的数据处理包,不管正则也好,html解析啦,xml解析啦,用起来非常方便

3. 内部类型使用成本巨低,不需要额外怎么 *** 作(java,c++用个map都很费劲)

4. 公司中,很大量的数据处理工作工作是不需要面对非常大的数据的

5. 巨大的数据不是语言所能解决的,需要处理数据的框架(hadoop, mpi)虽然小众,但是python还是有处理大数据的框架的,或者一些框架也支持python。

扩展资料:

Python处理数据缺点:

Python处理大数据的劣势:

1、python线程有gil,通俗说就是多线程的时候只能在一个核上跑,浪费了多核服务器。在一种常见的场景下是要命的:并发单元之间有巨大的数据共享或者共用(例如大dict)。

多进喊察程会导致内存吃紧,多线程则解决不了数据共享的问题,单独的写一个进程之间负责维培数护读写这个数据不仅效率不高而且麻烦

2、python执行效率不高,在处理大数据的时候,效率不高,这是真的,pypy(一个jit的python解释器,可以理解成脚本语言加速执行的东西)能够提高很大的速度,但是pypy不支持很多郑中茄python经典的包,例如numpy。

3. 绝大部分的大公司,用java处理大数据不管是环境也好,积累也好,都会好很多。

参考资料来源:百度百科-Python

Python 已经成为较受欢迎的程序设计语言之一。自从2004年以后,python的使用率呈线性增长。2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。由于Python语言的简洁性、易读性以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python来教授程序设计课程。

数据就是资产。大数据工程师是现在十分火热、高薪的职位。做大数据开发和分析不仅要用到Java,Python也是较重要的语言。

那么,今天我们就来分析一下,Python之于大数据的意义和作用。

相关推荐:《Python入门教程》

什么是大数据?

大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具敏誉有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

为什么是python大数据?

从大数据的百科介绍上看到,大数据想要成为信息资产,需要有两步,一是数据怎么来,二是数据处理。

数据怎么来:

在数据怎么来这个问题上,数据挖掘无疑是很多公司或者个人的优选,毕竟大部分公司或者个人是没有能力产生这么多数据的,只能是挖掘互联网上的相关数据。

网络爬虫是Python的传统强势领域,较流行的爬虫框架Scrapy,HTTP工具包urlib2,HTML解析工具beautifulsoup,XML解析器lxml,等等,都是能够独当一面的类库。

当然,网络爬虫并不仅仅只是打开网页,解析HTML怎么简单。高效的爬虫要能够支持大量灵活的并发 *** 作,常常要能够同时几千甚至上万个网页同时抓取,传统的线程池方式资源浪费比较大,线程数上千之后系统资源基本上就全浪费在线程调度上了。

Python由于能够很好的支持协程(Coroutine) *** 作,基于此发展起来很多并发库,如Gevent,Eventlet,还有Celery之类的分布式任务框架。被认为是比AMQP更高效的ZeroMQ也是较早就提供了Python版本。有了对高并发的支持,网络爬虫才真正可以达到大数据规模。

数据处理:

有了大数据,那么也需要处理,才能找到适合自己的数据。而在数据处理方向,Python也是数据科学家较喜欢的语言之一,这是因为Python本身就是一门工程桥培段性语言,数中做据科学家用Python实现的算法,可以直接用在产品中,这对于大数据初创公司节省成本是非常有帮助的。

正是因为这些原因,才让python语言成为很多公司处理大数据的优选。加之python本身具有简单、易学、库多等原因,让越来越多的人选择转行python开发。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8254940.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存