当前位置:首页 > 内存 > 正文

python 内存溢出(python内存溢出怎么解决)

  • 内存
  • 2024-06-14 18:51:53
  • 9980

一、python处理大数据程序运行的越来越慢的问题最近我编写并运行了一个程序,该程序最初能够每秒处理大约150个数据。预计晚上开始,第二天中午就能出结果。
但是如果第二天看呢???处理尚未完成。目前的数据处理速度大约是每秒5个,然后我们还要再等300个小时。
然后我检查了这个问题。大多数分析文章都说是GC(GarbageCollection)造成的。
垃圾回收机制的工作原理是为每个对象维护一个引用计数。每次创建和销毁内存对象时,都需要更改引用计数,如果创建大量对象,由于更改引用计数操作需要执行多次,程序执行过程中的额外性能开销是巨大的。触发回收有两种方式:一种是用户主动调用t()时,另一种是对象数量超过阈值时。
所以是GC拖慢了程序的性能,所以我们可以考虑处理过程中禁用垃圾收集。
经过这样的改进,速度精度将得到显着提高。然而,还有一个问题:运行过程中会产生大量对象。由于垃圾回收机制被禁用,它们保留在内存中,无法被清理掉,程序的内存使用量变得越来越大。解决方案是定期打开()然后关闭它或主动调用t()即可。
经过上面提到的改进,程序已经改进了很多,但是我的程序仍然运行得比较慢。然后我测试了每个步骤所花费的时间并找出了背后的原因。我使用Pandas创建一个DataFrame,然后使用每次迭代的结果将新数据添加到DataFrame中。随着里面的数据越来越多,添加的速度越来越慢,这是一个严重的负担。这里有两种解决方案:
1。分段保存结果,每隔一段时间保存一次结果,最后合并多个结果。
2我直接使用数据存储的方式来保存结果。随着数据量的增加,添加速度也变慢,但差别不是很大。在可以使用的范围内,或者除了方法1之外,还可以分段保存和合并。


二、python中temp是什么意思?Python中的Temp通常指“临时变量”,也可以看作“临时文件”。在编程过程中,我们可能需要临时保存一些信息,因此需要声明一个temp变量,该变量在程序执行完毕后会自动销毁,以避免内存泄漏。临时变量通常用于保存程序执行过程中的中间结果、状态等。
当我们使用Python进行数据处理或分析时,temp还可以用来保存临时数据文件。例如,如果需要将较大的数据集加载到内存中,但内存空间有限,我们可以先将数据保存为临时文件,然后再逐一读入内存进行处理,这样就可以避免内存溢出。临时文件通常有一定的生命周期,程序执行完毕后会自动销毁。
除了临时变量和临时文件之外,temp在Python中还有其他含义。例如,在某些函数中,可能需要使用参数的“副本”而不更改原始参数的值。这时,我们可以将原始参数作为temp变量传入函数中,这样函数内部对temp变量的任何更改都不会影响原始参数,从而实现安全控制。另外,temp有时也用来表示温度或临时占位符。
三、python错误?异常名称异常描述
AssertionError断言语句(断言)失败
AttributeError尝试访问未知对象的属性
EOFError用户在文件末尾输入EOF标志(Ctrl+d)
FloatingPointError浮点计算错误
调用()方法时
模块导入失败时出现ImportError
IndexError索引超出序列范围
搜索不存在的关键字时出现Key错误字典
键盘中断用户输入中断键(Ctrl+c)
内存内存溢出错误(可以通过删除对象释放内存)
NameError试图访问不存在的变量
MethodNotImplementedError尚未实现
OSError操作系统产生的异常(如打开不存在的文件)
OverflowError数值运算超出最大限制
ReferenceErrorWeak(弱)引用试图访问已被垃圾收集机制回收的对象
RuntimeError中的一般运行时错误
StopIteration迭代器没有更多值
SyntaxErrorPython语法错误
IndentationErrorindentationError
TabErrorTab和空格混合
Python错误系统编译器错误
SystemExitPython编译器进程终止
类型错误不同类型之间无效操作
UnboundLocalError访问未初始化的局部变量(NameError的子类)
与UnicodeErrorUnicode相关的错误(ValueError的子类)
UnicodeErrorUnicode编码时出错(UnicodeError的子类)
UnicodeDecodeErrorUnicode解码时出错(UnicodeErrorErrornicoderanic的子类)
ValueError参数无效传递给
ZeroDivisionError除以零