温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python性能优化技巧有哪些

发布时间:2022-03-16 13:50:34 来源:亿速云 阅读:340 作者:小新 栏目:开发技术

小编给大家分享一下python性能优化技巧有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

性能优化技巧

1. 限制CPU和内存使用量

如果Python程序占用资源太大,想限制资源的使用,可以使用resource包。

# CPU限制 def time_exceeded(signo, frame): print("CPU 超额...") raise SystemExit(1) def set_max_runtime(seconds): soft, hard = resource.getrlimit(resource.RLIMIT_CPU) resource.setrlimit(resource.RLIMIT_CPU, (seconds, hard)) signal.signal(signal.SIGXCPU, time_exceeded) # 限制内存使用 def set_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__来优化:

import sys class FileSystem(object):
def __init__(self, files, folders, devices): self.files = files self.folders = folders self.devices = devices print(sys.getsizeof( FileSystem ))   class FileSystem1(object):   __slots__ = ['files', 'folders', 'devices'] def __init__(self, files, folders, devices): self.files = files self.folders = folders self.devices = devices print(sys.getsizeof( FileSystem1 ))

python性能优化技巧有哪些

  • # Python 3.5下

  • #1-> 1016

  • #2-> 888

当定义__slots__属性时,Python使用固定大小的数组作为属性,而不用字典,这大大减少了每个实例所需的内存。当然使用__slots__也有缺点,比如,无法声明任何新属性,而且只能在__slots__上使用它们,__slots__的类也不能使用多重继承。

3. 用lru_cache缓存函数调用

都说Python性能差,尤其是一些计算的时候,其实是有一些通用的方法可以解决程序能的问题,比如缓存和记忆术。使用functools中的lru_cache可以解决迭代计算中大量重复迭代调用问题:

python性能优化技巧有哪些

# CacheInfo(hits=2, misses=4, maxsize=32, currsize=4)

在上例中,我们执行正在缓存的GET请求(最多3个缓存结果)。还使用cache_info方法检查函数的缓存信息。装饰器还提供了clear_cache方法,用于删除缓存。

4. __all__控制import

某些语言支持import成员(变量,方法,接口)的机制。在Python中,默认所有内容都会import,但是可以使用__all__来限制

def foo(): pass def bar(): pass __all__ = ["bar"]

通过这样的方式我们可以限制从some_module import *使用时可以导入的内容。该实例中,则仅import  bar函数。如果将__all__保留为空,并且在使用通配符import时,不会import任何东西,会触发AttributeError错误。

以上是“python性能优化技巧有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI