10138 内存分析(地图24小时内没有玩家在线则回收py表数据)
| | |
| | |
|
| | | import hashlib
|
| | | import os
|
| | | import gc
|
| | |
|
| | | '''è¡¨ç»æå®ä¹åå
¸
|
| | | {
|
| | |
| | | self.IpyDataClear(True)
|
| | | return
|
| | |
|
| | | def Recycle(self):
|
| | | Log("IPY_DataMgr Recycle")
|
| | | for tableName in Def_IpyTable.keys():
|
| | | if not hasattr(self, "ipy%sLen" % tableName):
|
| | | continue
|
| | | cacheList = getattr(self, "ipy%sCache" % tableName)
|
| | | del cacheList
|
| | | delattr(self, "ipy%sLen" % tableName)
|
| | | delattr(self, "ipy%sCache" % tableName)
|
| | | Log("Recycle IPY_%s" % tableName)
|
| | | |
| | | del self.fileMD5Dict, self.ipyConfigEx, self.ipyDataIndexMap, self.ipyDataIndexMapEx, self.ipyFuncConfigDict, self.classSizeDict
|
| | | self.fileMD5Dict = {}
|
| | | self.ipyConfigEx = {}
|
| | | self.ipyDataIndexMap = {}
|
| | | self.ipyDataIndexMapEx = {}
|
| | | self.ipyFuncConfigDict = {}
|
| | | self.classSizeDict = {}
|
| | | gc.collect()
|
| | | return
|
| | | |
| | | def LoadAll(self):
|
| | | ## å è½½å
¨é¨æ°æ®ï¼æµè¯å
åç¨ï¼å®é
åºç¨ä¸ä¸è°ç¨
|
| | | for tableName in Def_IpyTable.keys():
|
| | | setattr(self, "ipy%sLen" % tableName, 0)
|
| | | self.IpyDataClear()
|
| | | return
|
| | | |
| | | def IpyDataClear(self, onlyCheck=False):
|
| | | Log("IPY_DataMgr Reload... onlyCheck=%s" % onlyCheck)
|
| | | if not onlyCheck:
|
| | |
| | |
|
| | | import hashlib
|
| | | import os
|
| | | import gc
|
| | |
|
| | | '''è¡¨ç»æå®ä¹åå
¸
|
| | | {
|
| | |
| | | self.IpyDataClear(True)
|
| | | return
|
| | |
|
| | | def Recycle(self):
|
| | | Log("IPY_DataMgr Recycle")
|
| | | for tableName in Def_IpyTable.keys():
|
| | | if not hasattr(self, "ipy%sLen" % tableName):
|
| | | continue
|
| | | cacheList = getattr(self, "ipy%sCache" % tableName)
|
| | | del cacheList
|
| | | delattr(self, "ipy%sLen" % tableName)
|
| | | delattr(self, "ipy%sCache" % tableName)
|
| | | Log("Recycle IPY_%s" % tableName)
|
| | | |
| | | del self.fileMD5Dict, self.ipyConfigEx, self.ipyDataIndexMap, self.ipyDataIndexMapEx, self.ipyFuncConfigDict, self.classSizeDict
|
| | | self.fileMD5Dict = {}
|
| | | self.ipyConfigEx = {}
|
| | | self.ipyDataIndexMap = {}
|
| | | self.ipyDataIndexMapEx = {}
|
| | | self.ipyFuncConfigDict = {}
|
| | | self.classSizeDict = {}
|
| | | gc.collect()
|
| | | return
|
| | | |
| | | def LoadAll(self):
|
| | | ## å è½½å
¨é¨æ°æ®ï¼æµè¯å
åç¨ï¼å®é
åºç¨ä¸ä¸è°ç¨
|
| | | for tableName in Def_IpyTable.keys():
|
| | | setattr(self, "ipy%sLen" % tableName, 0)
|
| | | self.IpyDataClear()
|
| | | return
|
| | | |
| | | def IpyDataClear(self, onlyCheck=False):
|
| | | Log("IPY_DataMgr Reload... onlyCheck=%s" % onlyCheck)
|
| | | if not onlyCheck:
|
| | |
| | | import PlayerTeam
|
| | | import GameMap
|
| | | import NPCRealmRefresh
|
| | | import IpyGameDataPY
|
| | | #---------------------------------------------------------------------
|
| | | ## 坿¬å¼å¯
|
| | | # @param gameWorld IPY_GameWorld
|
| | |
| | | __ProcessRouteServer(gameWorld, tick)
|
| | |
|
| | | #æ¯åé触å
|
| | | __RefreshOnMinute(tick)
|
| | | curTime = GameWorld.GetCurrentTime()
|
| | | __OnMapMinute(curTime, tick)
|
| | | __RefreshOnMinute(curTime, tick)
|
| | | #äºåé触å
|
| | | __RefreshOnFiveMinute(tick)
|
| | | #宿¶æ£æµå
³éè¶
æ¶æä»¶
|
| | |
| | | ## æåéå·æ°
|
| | | # @param tick
|
| | | # @return None
|
| | | def __RefreshOnMinute(tick):
|
| | | def __RefreshOnMinute(curTime, tick):
|
| | | gameWorld = GameWorld.GetGameWorld()
|
| | | lastTick = gameWorld.GetTickByType(ChConfig.TYPE_Map_Tick_ProcessMinute)
|
| | | tickInterval = ChConfig.TYPE_Map_Tick_Time[ChConfig.TYPE_Map_Tick_ProcessMinute]
|
| | | if tick - lastTick < tickInterval:
|
| | | return
|
| | | gameWorld.SetTickByType(ChConfig.TYPE_Map_Tick_ProcessMinute, tick)
|
| | | |
| | | curTime = GameWorld.GetCurrentTime()
|
| | | |
| | | __OnMapMinute(curTime, tick)
|
| | |
|
| | | playerManager = GameWorld.GetMapCopyPlayerManager()
|
| | | for index in xrange(playerManager.GetPlayerCount()):
|
| | |
| | | return
|
| | | PyGameData.g_mapLastProcess_Minute = curMinute
|
| | | PlayerTeam.OnCheckTeamPlayerDisconnectTimeout(tick)
|
| | | |
| | | __CheckIpyDataRecycle(curTime)
|
| | | return
|
| | |
|
| | | def __CheckIpyDataRecycle(timeNow):
|
| | | ## æ£æ¥IpyDataæ°æ®åæ¶
|
| | | playerCount = GameWorld.GetPlayerManager().OnlineCount()
|
| | | if playerCount:
|
| | | PyGameData.g_ipyDataRecycleCheckTime = 0
|
| | | #GameWorld.DebugLog("å°å¾è¿æç©å®¶å¨çº¿! playerCount=%s" % playerCount)
|
| | | return
|
| | | |
| | | curTime = GameWorld.ChangeDatetimeToNum(timeNow)
|
| | | if not PyGameData.g_ipyDataRecycleCheckTime:
|
| | | PyGameData.g_ipyDataRecycleCheckTime = curTime
|
| | | #GameWorld.DebugLog("å°å¾æ²¡æç©å®¶å¨çº¿")
|
| | | return
|
| | | |
| | | if PyGameData.g_ipyDataRecycleCheckTime == 1:
|
| | | # å·²ç»åæ¶äº
|
| | | #GameWorld.DebugLog("æ¬æ¬¡å·²ç»åæ¶è¿äº")
|
| | | return
|
| | | |
| | | if curTime - PyGameData.g_ipyDataRecycleCheckTime < 24 * 3600:
|
| | | #GameWorld.DebugLog("è¿æªå°è¾¾åæ¶æ¶é´, passSeconds=%s" % (curTime - PyGameData.g_ipyDataRecycleCheckTime))
|
| | | return
|
| | | PyGameData.g_ipyDataRecycleCheckTime = 1 |
| | | IpyGameDataPY.IPYData.Recycle()
|
| | | return
|
| | |
|
| | | ## æ´åå°æ¶è§¦å <00å30åéæ¶è§¦å>
|
| | | # @param curPlayer
|
| | |
| | |
|
| | | import hashlib
|
| | | import os
|
| | | import gc
|
| | |
|
| | | '''è¡¨ç»æå®ä¹åå
¸
|
| | | {
|
| | |
| | | self.IpyDataClear(True)
|
| | | return
|
| | |
|
| | | def Recycle(self):
|
| | | Log("IPY_DataMgr Recycle")
|
| | | for tableName in Def_IpyTable.keys():
|
| | | if not hasattr(self, "ipy%sLen" % tableName):
|
| | | continue
|
| | | cacheList = getattr(self, "ipy%sCache" % tableName)
|
| | | del cacheList
|
| | | delattr(self, "ipy%sLen" % tableName)
|
| | | delattr(self, "ipy%sCache" % tableName)
|
| | | Log("Recycle IPY_%s" % tableName)
|
| | | |
| | | del self.fileMD5Dict, self.ipyConfigEx, self.ipyDataIndexMap, self.ipyDataIndexMapEx, self.ipyFuncConfigDict, self.classSizeDict
|
| | | self.fileMD5Dict = {}
|
| | | self.ipyConfigEx = {}
|
| | | self.ipyDataIndexMap = {}
|
| | | self.ipyDataIndexMapEx = {}
|
| | | self.ipyFuncConfigDict = {}
|
| | | self.classSizeDict = {}
|
| | | gc.collect()
|
| | | return
|
| | | |
| | | def LoadAll(self):
|
| | | ## å è½½å
¨é¨æ°æ®ï¼æµè¯å
åç¨ï¼å®é
åºç¨ä¸ä¸è°ç¨
|
| | | for tableName in Def_IpyTable.keys():
|
| | | setattr(self, "ipy%sLen" % tableName, 0)
|
| | | self.IpyDataClear()
|
| | | return
|
| | | |
| | | def IpyDataClear(self, onlyCheck=False):
|
| | | Log("IPY_DataMgr Reload... onlyCheck=%s" % onlyCheck)
|
| | | if not onlyCheck:
|
| | |
| | | g_commMapLinePlayerCountDict = {} # 常è§å°å¾åçº¿äººæ° {mapID:{lineID:人æ°, ...}}
|
| | | g_needRefreshMapServerState = True # 常è§å°å¾åçº¿äººæ°æ¯å¦æåæ´éè¦éç¥
|
| | | g_mapLastProcess_Minute = -1 # å°å¾ä¸æ¬¡å¤ççåé
|
| | | g_ipyDataRecycleCheckTime = 0 # å°å¾IpyDataæ°æ®åæ¶æ£æ¥time
|
| | |
|
| | | InitPyItem = False # æ¯å¦å è½½è¿ç©å表æéè¦çPyæ°æ®, æ¯å¼ å°å¾åªå¨å¯å¨æ¶æ§è¡ä¸æ¬¡
|
| | | DailyUseCountLimitItemIDList = [] # æ¯æ¥æä½¿ç¨ä¸ªæ°éå¶çç©åIDå表
|