| | |
| | |
|
| | | def acquire(self, obj_class, *args, **kwargs):
|
| | | """获取对象并记录其所属池"""
|
| | | return obj_class(*args, **kwargs) # 关闭对象池
|
| | | if obj_class not in self._pools:
|
| | | # 如果池不存在,自动创建大小为0的无限制池
|
| | | self.create_pool(obj_class, 0)
|
| | |
| | |
|
| | | def release(self, obj):
|
| | | """释放对象并递归释放其嵌套对象池对象"""
|
| | | return # 释放对象效率有点低,暂时关闭对象池,后续优化
|
| | | obj_id = id(obj)
|
| | |
|
| | | # 检查是否正在递归释放中
|
| | |
| | | visited = set([obj_id]) # 初始化已访问集合
|
| | |
|
| | | try:
|
| | | ### 回收前处理,主要处理一些其他不需要释放的对象池对象,防止被连同误回收
|
| | | if hasattr(obj, 'onRelease'):
|
| | | obj.onRelease()
|
| | | # 1. 递归释放嵌套对象池对象
|
| | | self._recursive_release(obj, visited)
|
| | | # 2. 释放当前对象
|
| | |
| | | PyGameData.g_objPoolMgr = poolMgr
|
| | | return poolMgr
|
| | |
|
| | | def OnMinute():
|
| | | def OnMinute(curTime):
|
| | | """每分钟执行,输出对象池状态"""
|
| | | GetPoolMgr().pool_status()
|
| | | if curTime.minute == 5: # 每小时的5分输出一次
|
| | | GetPoolMgr().pool_status()
|
| | | return
|
| | |
|
| | | ## 使用示例
|