python中flask如何降低内存
发布时间:2025-05-18 22:08:33 发布人:远客网络
一、python中flask如何降低内存
在小型程序中,特别是在脚本中,使用Python自带的dict来表示结构信息非常简单方便:
>>> ob={'x':1,'y':2,'z':3}
>>> x= ob['x']
>>> ob['y']= y
由于在Python 3.6中dict的实现采用了一组有序键,因此其结构更为紧凑,更深得人心。但是,让我们看看dict在内容中占用的空间大小:
>>> print(sys.getsizeof(ob))
如上所示,dict占用了大量内存,尤其是如果突然虚需要创建大量实例时:
有些人希望将所有东西都封装到类中,他们更喜欢将结构定义为可以通过属性名访问的类:
在上表中,__weakref__是该列表的引用,称之为到该对象的弱引用(weak reference);字段__dict__是该类的实例字典的引用,其中包含实例属性的值(注意在64-bit引用平台中占用8字节)。从Python3.3开始,所有类实例的字典的键都存储在共享空间中。这样就减少了内存中实例的大小:
>>> print(sys.getsizeof(ob), sys.getsizeof(ob.__dict__))
因此,大量类实例在内存中占用的空间少于常规字典(dict):
不难看出,由于实例的字典很大,所以实例依然占用了大量内存。
为了大幅降低内存中类实例的大小,我们可以考虑干掉__dict__和__weakref__。为此,我们可以借助 __slots__:
__slots__='x','y','z'
>>> print(sys.getsizeof(ob))
如此一来,内存中的对象就明显变小了:
在类的定义中使用了__slots__以后,大量实例占据的内存就明显减少了:
目前,这是降低类实例占用内存的主要方式。
这种方式减少内存的原理为:在内存中,对象的标题后面存储的是对象的引用(即属性值),访问这些属性值可以使用类字典中的特殊描述符:
>>> pprint(Point.__dict__)
....................................
为了自动化使用__slots__创建类的过程,你可以使用库namedlist()。namedlist.namedlist函数可以创建带有__slots__的类:
>>> Point= namedlist('Point',('x','y','z'))
还有一个包attrs(),无论使用或不使用__slots__都可以利用这个包自动创建类。
Python还有一个自带的元组(tuple)类型,代表不可修改的数据结构。元组是固定的结构或记录,但它不包含字段名称。你可以利用字段索引访问元组的字段。在创建元组实例时,元组的字段会一次性关联到值对象:
>>> print(sys.getsizeof(ob))
由于内存中的元组还包含字段数,因此需要占据内存的8个字节,多于带有__slots__的类:
由于元组的使用非常广泛,所以终有一天你需要通过名称访问元组。为了满足这种需求,你可以使用模块collections.namedtuple。
namedtuple函数可以自动生成这种类:
>>> Point= namedtuple('Point',('x','y','z'))
如上代码创建了元组的子类,其中还定义了通过名称访问字段的描述符。对于上述示例,访问方式如下:
return tuple.__new__(cls,(x, y, z))
这种类所有的实例所占用的内存与元组完全相同。但大量的实例占用的内存也会稍稍多一些:
记录类:不带循环GC的可变更命名元组
由于元组及其相应的命名元组类能够生成不可修改的对象,因此类似于ob.x的对象值不能再被赋予其他值,所以有时还需要可修改的命名元组。由于Python没有相当于元组且支持赋值的内置类型,因此人们想了许多办法。在这里我们讨论一下记录类(recordclass,),它在StackoverFlow上广受好评()。
此外,它还可以将对象占用的内存量减少到与元组对象差不多的水平。
recordclass包引入了类型recordclass.mutabletuple,它几乎等价于元组,但它支持赋值。它会创建几乎与namedtuple完全一致的子类,但支持给属性赋新值(而不需要创建新的实例)。recordclass函数与namedtuple函数类似,可以自动创建这些类:
>>>Point= recordclass('Point',('x','y','z'))
>>>ob= Point(1, 2, 3)
类实例的结构也类似于tuple,但没有PyGC_Head:
在默认情况下,recordclass函数会创建一个类,该类不参与垃圾回收机制。一般来说,namedtuple和recordclass都可以生成表示记录或简单数据结构(即非递归结构)的类。在Python中正确使用这二者不会造成循环引用。因此,recordclass生成的类实例默认情况下不包含PyGC_Head片段(这个片段是支持循环垃圾回收机制的必需字段,或者更准确地说,在创建类的PyTypeObject结构中,flags字段默认情况下不会设置Py_TPFLAGS_HAVE_GC标志)。
大量实例占用的内存量要小于带有__slots__的类实例:
recordclass库提出的另一个解决方案的基本想法为:内存结构采用与带__slots__的类实例同样的结构,但不参与循环垃圾回收机制。这种类可以通过recordclass.make_dataclass函数生成:
>>> Point= make_dataclass('Point',('x','y','z'))
这种方式创建的类默认会生成可修改的实例。
另一种方法是从recordclass.dataobject继承:
这种方法创建的类实例不会参与循环垃圾回收机制。内存中实例的结构与带有__slots__的类相同,但没有PyGC_Head:
>>> print(sys.getsizeof(ob))
如果想访问字段,则需要使用特殊的描述符来表示从对象开头算起的偏移量,其位置位于类字典内:
mappingproxy({'__new__':,
.......................................
大量实例占用的内存量在CPython实现中是最小的:
还有一个基于Cython()的方案。该方案的优点是字段可以使用C语言的原子类型。访问字段的描述符可以通过纯Python创建。例如:
>>> print(sys.getsizeof(ob))
二、Python有哪些黑魔法
1、当然,Python的黑魔法是所有的内省和动态绑定。
2、例如,Python可以重新绑定解释器的异常,以便在程序异常结束时可以进行一些自定义处理。
3、一旦你重置了异常钩子,一旦你的代码抛出一个异常,整个解释器的环境将被ipdb接管,然后被用作交互模式。通常,我将检查堆栈并pickle必要的对象,因此稍后再犯错误更容易。
4、由于IPython是一个非gui程序,所以即使在SSH中也可以使用它,这是SSH缺少IDE的完美解决方案。
5、动态绑定的另一个用途是,当程序依赖于修改后的库时,可以将修改后的部分剥离,并在运行时动态绑定到相应的库。
6、在内省中,Python可以通过dir()和help()函数获取列表并帮助对象的成员,当您找不到库文档时,这些函数非常有用。只要开发人员在函数下面写注释,您就可以在帮助中看到它。
7、除了上面提到的特性之外,python还有一些小技巧,还有一些其他的答案。尽管它们中的许多都是语法上的糖,但它们可以使程序更有python:使用槽使成员静态,您可以节省大量的内存。装饰器,常用的功能,例如函数计时,也可以用来生成新的函数签名。函数签名可以影响传递检查和ide完成,这对于具有不确定的长参数的函数非常有用。许多库使用这种方法来处理不同版本的API。生成器,它可以为仅仅遍历数据保存大量的内存。参数也展开了。
8、典型的例子是zip(listx)和链(listx),它们分别对应于转置和连接。如果name==“main”:检查主程序是否被调用,主程序必须与多处理并行使用这个框。例如,枚举将列表转换为list2index可以用于((x,I)for I,枚举列表中的x(listx))namedtuple,生成类似于C语言的结构,并支持所有元组的语法。不初始化该词的defaultdictionary可以使用lambda来实现嵌套结构默认的结构的嵌套结构(lambda:defaultdictionary(int)),或者甚至是递归字典树=lambda:defaultdictionary(树)
三、python详细安装教程3.9.6(python详细安装教程手机)
python安装教程?
进入python官网下载页面,鼠标移入【download】会显示下拉导航栏,根据自己的电脑系统选择相应的版本,如果是windows系统,就选windows,如果是苹果就选mac。点击windows进入windows版本列表页面,选择一个版本下载。
进入python官网下载页面,鼠标移入【download】会显示下拉导航栏,根据自己的电脑系统选择相应的版本,如果是windows系统,就选windows,如果是苹果就选mac。点击windows进入windows版本列表页面,选择一个版本下载。
python安装教程如下:双击执行下载的exe程序,进入安装界面。安装界面可以选择默认安装,也可以自定义安装,我比较喜欢自定义安装,默认安装路径都比较深,自定义安装自己定义个较浅的目录,后续容易找。
python安装教程具体如下:确定电脑的系统类型。在安装python之前,你要先确定一下你的电脑的系统类型及详细配置,具体方法如下:点击桌面上的快捷图标“此电脑”,然后右击“属性”,在设备规格下仔细查看电脑的“系统类型”。
python下载安装教程(详细步骤+图示)
1、进入python官网下载页面,鼠标移入【download】会显示下拉导航栏,根据自己的电脑系统选择相应的版本,如果是windows系统,就选windows,如果是苹果就选mac。点击windows进入windows版本列表页面,选择一个版本下载。
1、进入python官网下载页面,鼠标移入【download】会显示下拉导航栏,根据自己的电脑系统选择相应的版本,如果是windows系统,就选windows,如果是苹果就选mac。点击windows进入windows版本列表页面,选择一个版本下载。
2、首先,需要到python的官方网站下载python的安装包。打开官方网站之后,点击“Downloads”一栏,然后在弹出的窗口选择“windows”。然后根据不同的操作系统,选择不同版本的安装包。
3、python安装教程具体如下:确定电脑的系统类型。在安装python之前,你要先确定一下你的电脑的系统类型及详细配置,具体方法如下:点击桌面上的快捷图标“此电脑”,然后右击“属性”,在设备规格下仔细查看电脑的“系统类型”。
4、python安装教程如下:双击执行下载的exe程序,进入安装界面。安装界面可以选择默认安装,也可以自定义安装,我比较喜欢自定义安装,默认安装路径都比较深,自定义安装自己定义个较浅的目录,后续容易找。
5、首先打开浏览器,百度搜索【python】。出现搜索结果后,再进入下图所示的官网中。进入官网后,鼠标移至【download】再选择自己的系统。进入下载页面后,再选择python的版本。
6、首先,登录python下载网址,可以在该页面上看到两类下载链接,分别是Pythonx和Pythonx版本。
python安装教程具体如下:确定电脑的系统类型。在安装python之前,你要先确定一下你的电脑的系统类型及详细配置,具体方法如下:点击桌面上的快捷图标“此电脑”,然后右击“属性”,在设备规格下仔细查看电脑的“系统类型”。
首先,需要到python的官方网站下载python的安装包。打开官方网站之后,点击“Downloads”一栏,然后在弹出的窗口选择“windows”。然后根据不同的操作系统,选择不同版本的安装包。
进入python官网下载页面,鼠标移入【download】会显示下拉导航栏,根据自己的电脑系统选择相应的版本,如果是windows系统,就选windows,如果是苹果就选mac。点击windows进入windows版本列表页面,选择一个版本下载。
python安装教程如下:双击执行下载的exe程序,进入安装界面。安装界面可以选择默认安装,也可以自定义安装,我比较喜欢自定义安装,默认安装路径都比较深,自定义安装自己定义个较浅的目录,后续容易找。
首先,需要到python的官方网站下载python的安装包。打开官方网站之后,点击“Downloads”一栏,然后在弹出的窗口选择“windows”。然后根据不同的操作系统,选择不同版本的安装包。
python安装教程如下:双击执行下载的exe程序,进入安装界面。安装界面可以选择默认安装,也可以自定义安装,我比较喜欢自定义安装,默认安装路径都比较深,自定义安装自己定义个较浅的目录,后续容易找。
首先,你需要进入Python官网,从下载页面选择适合你操作系统的安装包。然后,你需要下载安装包并运行,按照提示完成安装。在安装过程中,你需要选择安装路径和添加环境变量等选项。
首先,登录python下载网址,可以在该页面上看到两类下载链接,分别是Pythonx和Pythonx版本。
python安装教程具体如下:确定电脑的系统类型。
python下载安装教程:自定义安装目录,点击install进行安装,打开cmd窗口,输入python,显示python的版本,安装成功。
安装模块前,首先要安装setuptools。就能用ez_setup.py安装了setuptools了。有setuptools,就要开始配置环境。
安装python模块推荐使用pip如果您安装的是python10以上的版本,默认是安装了pip的。
python安装下载模块的方法:按下键盘上的【win+r】快捷键,打开运行窗口;输入cmd,点击【确定】;在打开的命令提示符中执行【pipinstall模块名】命令即可。
不过,Python的大多数库文件都是使用Python实现的,因此,比如说,我们使用了语句importcollections,之后就可以通过调用collections.namedtuple()创建命名的元组,而我们存取的功能则实现于collections.py模块文件中。
它的使用方法是从命令行去到setup.py所在的路径下,运行pythonsetup.pyinstall仔细看一下安装时输出的信息可以发现,在线学习这个命令做的事情其实也就是帮你把模块的代码copy到site-packages文件夹。