您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python:用迭代器和生成器降低程序内存占用率

5b51 2022/1/14 8:25:23 python 字数 4007 阅读 817 来源 www.jb51.cc/python

情况描述:用一个30行代码的python文件,处理300M的数据,用到的数据结构有:pandas.DataFrame(),list,dict,二重循环,处理完一次写入磁盘。

概述


情况描述:用一个30行代码的python文件,处理300M的数据,用到的数据结构有:pandas.DataFrame(),list,dict,二重循环,处理完一次写入磁盘。

问题:内存占用率97%-99%,大约1.5G内存,执行时间超过12h。有什么办法可以降低python内存占用率,缩短执行时间吗?

xrange生成器,替代range列表

因为rang是list,python在执行时会直接划一块内存来使用,而xrange是采用生成一个一个的执行。修改之后每个进程的占用内存数稳定在5M左右。内存占用降低的很明显。

range和xrange区别:(1) 类型不同,xrange  (2) range返回包含所有元素的列表, xrange返回的是 一个 生成器,元素逐个被创建 (3)  xrange 不支持列表切片,进行多次next()迭代,每次都会从头开始。

迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration。迭代工具内部会在每次迭代时调用next方法,并且捕捉StopIteration异常来确定何时离开。

在Python中,for循环可以用于Python中的任何类型,包括列表、元祖等等,实际上,for循环可用于任何“可迭代对象”,这其实就是迭代器。

使用迭代器一个显而易见的好处就是:每次只从对象中读取一条数据,不会造成内存的过大开销。

案例:比如要逐行读取一个文件内容,利用readlines()方法,我们可以这么写:

<div class="wp_codeBox" style="color:rgb(17,17,17);font-family:Verdana,Arial,Helvetica,sans-serif;font-size:13px;">
<table style="border:1px solid #C0C0C0;border-collapse:collapse;"><tr id="p3601"><td class="line_numbers" style="border:1px solid #C0C0C0;border-collapse:collapse;">

1
2

总结

以上是编程之家为你收集整理的Python:用迭代器和生成器降低程序内存占用率全部内容,希望文章能够帮你解决Python:用迭代器和生成器降低程序内存占用率所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶