예제 #1
0
    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]
예제 #2
0
    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]
예제 #3
0
    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()
예제 #4
0
    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()