Bootstrap

python程序越跑越慢_python程序越跑越慢与内存泄漏

问题:运行python程序的时候,在100轮以后时间从初始的3S一次,慢慢变为1分钟一次,越来越慢。

处理方法:查询资料得,这种问题的出现基本是由于程序内存泄漏。所以需要监测内存占用情况。

监测内存需要: memory_profiler 与   psutil

1. pip install memory_profiler         pip install psutil

2. 在需要监测的程序前放入装饰器, 更多用法见memory_profiler的文档: https://pypi.org/project/memory-profiler/

例:

from memory_profiler import profile

@profile

def my_func():

a = [1] * (10 ** 6)

b = [2] * (2 * 10 ** 7)

del b

return a

3. 运行  python -m memory_profiler test.py

就会出现如下结果:

Line #    Mem usage    Increment   Line Contents

================================================

10    189.7 MiB    189.7 MiB   @profile

11                             def readdata(data_path, user_id):

12    279.7 MiB     90.0 MiB       power = pd.read_csv(data_path)

13    190.9 MiB      0.0 MiB       power = power.loc[(power.user_id == user_id), :]

14    191.0 MiB      0.1 MiB       data = power.drop(["user_id"], axis=1)

15    191.0 MiB      0.0 MiB       return data

本文最终发现的问题是在, 217    303.5 MiB     33.4 MiB       sess.run(tf.global_variables_initializer())

因为直接把神经网络的创建和sess.run 放在for循环里,所以每次循环都重新sess.run,创建计算图,导致内存占用越来越大,最终程序崩溃。

因此最后将神经网络建立与训练部分单独 def 了一下,然后再调用一次,这样只建立了一个计算图,内存只占用一次,训练时间一下快了很多

;