2 因为当使用Python数据库游标从数据库中取出数据时,游标会将所有数据读取到内存中,并且直到游标关闭或者重新查询时才会释放内存,所以数据会一直存在于内存中。
3 为了避免内存占用过多,可以考虑使用逐行读取数据的方式,或者使用一些内存管理工具对内存进行优化,以提高程序的性能和稳定性。
1 使用装饰器来衡量函数执行时间
有一个简单方法,那就是定义一个装饰器来测量函数的执行时间,并输出结果:
import time
from functoolsimport wraps
import random
def fn_timer(function):
@wraps(function)
def function_timer(args, kwargs):
t0= timetime()
result= function(args, kwargs)
t1= timetime()
print("Total time running %s: %s seconds" %
(function__name__, str(t1- t0))
)
return result
return function_timer
@fn_timer
def random_sort(n):
return sorted([randomrandom() for i in range(n)])
if __name__== "__main__":
random_sort(2000000)
输出:Total time running random_sort: 06598007678985596 seconds
使用方式的话,就是在要监控的函数定义上面加上 @fn_timer 就行了
或者
# 可监控程序运行时间
import time
import random
def clock(func):
def wrapper(args, kwargs):
start_time= timetime()
result= func(args, kwargs)
end_time= timetime()
print("共耗时: %s秒" % round(end_time- start_time, 5))
return result
return wrapper
@clock
def random_sort(n):
return sorted([randomrandom() for i in range(n)])
if __name__== "__main__":
random_sort(2000000)
输出结果:共耗时: 065634秒
2 使用timeit模块
另一种方法是使用timeit模块,用来计算平均时间消耗。
执行下面的脚本可以运行该模块。
这里的timing_functions是Python脚本文件名称。
在输出的末尾,可以看到以下结果:4 loops, best of 5: 208 sec per loop
这表示测试了4次,平均每次测试重复5次,最好的测试结果是208秒。
如果不指定测试或重复次数,默认值为10次测试,每次重复5次。
3 使用Unix系统中的time命令
然而,装饰器和timeit都是基于Python的。在外部环境测试Python时,unix time实用工具就非常有用。
运行time实用工具:
输出结果为:
Total time running random_sort: 13931210041 seconds
real 149
user 140
sys 008
第一行来自预定义的装饰器,其他三行为:
real表示的是执行脚本的总时间
user表示的是执行脚本消耗的CPU时间。
sys表示的是执行内核函数消耗的时间。
注意:根据维基百科的定义,内核是一个计算机程序,用来管理软件的输入输出,并将其翻译成CPU和其他计算机中的电子设备能够执行的数据处理指令。
因此,Real执行时间和User+Sys执行时间的差就是消耗在输入/输出和系统执行其他任务时消耗的时间。
4 使用cProfile模块
5 使用line_profiler模块
6 使用memory_profiler模块
7 使用guppy包
pip install memory_profiler
pip install psutil
pip install matplotlib
使用方法
from memory_profiler import profile
@profile(precision=4, stream=open('testlog', 'w+'))
def test(args: List):
运行:
python3 testpy
Mem usage:表示执行该行后Python解释器的内存使用情况
Increment:表示当前行的内存相对于上一行的差异,即自己本身增长了多少,如果减少了则不显示
以上就是关于python数据库游标取出来的数据一直在内存中全部的内容,包括:python数据库游标取出来的数据一直在内存中、7种检测Python程序运行时间、CPU和内存占用的方法、python 内存占用分析工具等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)