在某网络游戏中,定义了玩家类Player(id,name,level,...)。每有一个在线玩家,在服务器程序内则有一个Player的实例,当在线人数很多时,将产生大量实例。(如百万级)如何降低这些大量实例的内存开销?
可以通过定义类的__slots__属性,省名实例有哪些属性(关闭动态绑定)
class Player1: def __init__(self, uid, name, level): self.uid = uid self.name = name self.level = level class Player2: __slots__ = ['uid', 'name', 'level'] def __init__(self, uid, name, level): self.uid = uid self.name = name self.level = level
Player2实例使用的内存相比Player1要更小
主要差距在于Player1会有__dict__字典来动态维护,这个字典占内存较大
但是Player2不能不能动态添加属性了
class Player1: def __init__(self, uid, name, level): self.uid = uid self.name = name self.level = level class Player2: __slots__ = ['uid', 'name', 'level'] def __init__(self, uid, name, level): self.uid = uid self.name = name self.level = level p1 = Player1('123','xxq',1) p1.q = 1 print(dir(p1))
这是可以的
但这是不行的
class Player1: def __init__(self, uid, name, level): self.uid = uid self.name = name self.level = level class Player2: __slots__ = ['uid', 'name', 'level'] def __init__(self, uid, name, level): self.uid = uid self.name = name self.level = level p2 = Player2('123','xxq',1) p2.q = 1 print(dir(p2))
Python类为创建大量实例节省内存(__slots__)
最新推荐文章于 2024-09-15 22:31:42 发布
本文探讨在网络游戏中,如何通过使用Python的__slots__特性降低Player类实例内存开销,比较Player1和Player2的内存占用,并指出Player2的优点和限制,适用于高并发场景下的内存管理优化。
摘要由CSDN通过智能技术生成