def cleanup(self, force = False): #debug('Releasing Data Manager contents %s' % ('(forced)' if force else '',)) keys = [] for url in self.cache.iterkeys(): refCnt = len(gc.get_referrers(self.cache[url])) if force or refCnt <= 1: keys.append(url) if keys: debug( "DataManager will release: %s" % keys) for url in keys: refCnt = len(gc.get_referrers(self.cache[url])) if refCnt > 1: error('Error: Releasing data for %s with ref count: %d' % (url, refCnt)) del self.cache[url]
def cleanup(self, force=False): #debug('Releasing Data Manager contents %s' % ('(forced)' if force else '',)) keys = [] for url in self.cache.iterkeys(): refCnt = len(gc.get_referrers(self.cache[url])) if force or refCnt <= 1: keys.append(url) if keys: debug("DataManager will release: %s" % keys) for url in keys: refCnt = len(gc.get_referrers(self.cache[url])) if refCnt > 1: error('Error: Releasing data for %s with ref count: %d' % (url, refCnt)) del self.cache[url]
def init(self, **data): """ Initialize the required external data, take into account that this function may be called more than once if initialization fails """ from ignifuga.components.Component import Component if not self._initialComponents and 'components' in self._data: if isinstance(self._data['components'], dict): for c_id, c_data in self._data['components'].iteritems(): c_data['id'] = c_id c_data['entity'] = self self._initialComponents.append(Component.create(**c_data)) elif isinstance(self._data['components'], list): for c_data in self._data['components']: c_data['entity'] = self self._initialComponents.append(Component.create(**c_data)) failcount = {} while self._initialComponents: component = self._initialComponents.pop(0) try: component.init(**data) except Exception, ex: #debug(traceback.format_exc()) # Something failed, try it again later self._initialComponents.append(component) if component not in failcount: failcount[component] = 1 else: failcount[component] += 1 if failcount[component] >= 10: debug( 'Temporarily failed initializing Entity %s because of component %s' % (self.id, component)) debug(traceback.format_exc()) self._initFailCount += 1 if self._initFailCount > 10: self._initFailCount = 0 error( 'Ignoring Entity %s, could not initialize it because of component %s' % (self.id, component)) error(traceback.format_exc()) DONE() return else: failcount[component] = 0 # Allow other entities to initialize, then come back here SKIP()
def init(self,**data): """ Initialize the required external data, take into account that this function may be called more than once if initialization fails """ from ignifuga.components.Component import Component if not self._initialComponents and 'components' in self._data: if isinstance(self._data['components'], dict): for c_id, c_data in self._data['components'].iteritems(): c_data['id'] = c_id c_data['entity'] = self self._initialComponents.append(Component.create(**c_data)) elif isinstance(self._data['components'], list): for c_data in self._data['components']: c_data['entity'] = self self._initialComponents.append(Component.create(**c_data)) failcount = {} while self._initialComponents: component = self._initialComponents.pop(0) try: component.init(**data) except Exception, ex: #debug(traceback.format_exc()) # Something failed, try it again later self._initialComponents.append(component) if component not in failcount: failcount[component] = 1 else: failcount[component] += 1 if failcount[component] >= 10: debug('Temporarily failed initializing Entity %s because of component %s' % (self.id, component)) debug(traceback.format_exc()) self._initFailCount+=1 if self._initFailCount > 10: self._initFailCount = 0 error('Ignoring Entity %s, could not initialize it because of component %s' % (self.id, component)) error(traceback.format_exc()) DONE() return else: failcount[component] = 0 # Allow other entities to initialize, then come back here SKIP()