python性能优化技巧有哪些
python性能优化技巧有哪些
小编给大家分享一下python性能优化技巧有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
性能优化技巧
1. 限制CPU和内存使用量
如果Python程序占用资源太大,想限制资源的使用,可以使用resource包。
#CPU限制deftime_exceeded(signo,frame):print("CPU超额...")raiseSystemExit(1)defset_max_runtime(seconds):soft,hard=resource.getrlimit(resource.RLIMIT_CPU)resource.setrlimit(resource.RLIMIT_CPU,(seconds,hard))signal.signal(signal.SIGXCPU,time_exceeded)#限制内存使用defset_max_memory(size):soft,hard=resource.getrlimit(resource.RLIMIT_AS)resource.setrlimit(resource.RLIMIT_AS,(size,hard))
对CPU限制时候,先获取特定资源(RLIMIT_CPU)的软限制和硬限制,然后使用参数指定的秒数和获取的硬限制来设置。如果超过CPU时间,将注册导致系统退出的信号。
对内存限制,也先获取软限制和硬限制,并用带有size参数的setrlimit对其进行设置。
2. 通过__slots__节省内存
如果程序中有一个类需要创建大量实例,那么可能会对内存占用会非常大。因为Python使用字典来表示类实例的属性,这可以加速执行,但内存效率很差,通常这不是问题。可以使用__slots__来优化:
importsysclassFileSystem(object):
def__init__(self,files,folders,devices):self.files=filesself.folders=foldersself.devices=devicesprint(sys.getsizeof(FileSystem))classFileSystem1(object):__slots__=['files','folders','devices']def__init__(self,files,folders,devices):self.files=filesself.folders=foldersself.devices=devicesprint(sys.getsizeof(FileSystem1))
# Python 3.5下
#1-> 1016
#2-> 888
当定义__slots__属性时,Python使用固定大小的数组作为属性,而不用字典,这大大减少了每个实例所需的内存。当然使用__slots__也有缺点,比如,无法声明任何新属性,而且只能在__slots__上使用它们,__slots__的类也不能使用多重继承。
3. 用lru_cache缓存函数调用
都说Python性能差,尤其是一些计算的时候,其实是有一些通用的方法可以解决程序能的问题,比如缓存和记忆术。使用functools中的lru_cache可以解决迭代计算中大量重复迭代调用问题:
#CacheInfo(hits=2,misses=4,maxsize=32,currsize=4)
在上例中,我们执行正在缓存的GET请求(最多3个缓存结果)。还使用cache_info方法检查函数的缓存信息。装饰器还提供了clear_cache方法,用于删除缓存。
4. __all__控制import
某些语言支持import成员(变量,方法,接口)的机制。在Python中,默认所有内容都会import,但是可以使用__all__来限制
deffoo():passdefbar():pass__all__=["bar"]
通过这样的方式我们可以限制从some_module import *使用时可以导入的内容。该实例中,则仅import bar函数。如果将__all__保留为空,并且在使用通配符import时,不会import任何东西,会触发AttributeError错误。
以上是“python性能优化技巧有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!
推荐阅读
-
Lightly IDE 快捷键:Python 开发者必学的效率提升操作
-
GitHub Codespaces 模板配置:快速初始化项目环境的技巧
-
Python 类型注解进阶:mypy 静态类型检查与 IDE 集成
-
Python 3.12 模式匹配增强:结构分解与多分支逻辑简化实战
-
Lightly IDE 快捷键定制:Python 开发者专属效率提升方案
-
Python 装饰器高级用法:类装饰器与元类结合实践
-
Python 生成器表达式优化:内存占用与迭代效率平衡技巧
-
Python 类型注解深度:Protocol 协议与泛型类型约束实践
-
Python 3.12 新特性解析:模式匹配增强与性能优化实战
-
Lightly IDE 深度评测:轻量级 Python 开发工具是否适合团队协作?
