NDB no borra la memoria durante una solicitud larga

Actualmente estoy descargando un trabajo de larga duración a un TaskQueue para calcular las conexiones entre las entidades NDB en el almacén de datos.

Básicamente, esta cola maneja varias listas de claves de entidad que deben estar relacionadas con otraquery por elnode_in_connected_nodes función en elGetConnectedNodes nodo:

class GetConnectedNodes(object):
"""Class for getting the connected nodes from a list of nodes in a paged way"""
def __init__(self, list, query):
    # super(GetConnectedNodes, self).__init__()
    self.nodes = [ndb.model.Key('Node','%s' % x) for x in list]
    self.cursor = 0
    self.MAX_QUERY = 100
    # logging.info('Max query - %d' % self.MAX_QUERY)
    self.max_connections = len(list)
    self.connections = deque()
    self.query=query

def node_in_connected_nodes(self):
    """Checks if a node exists in the connected nodes of the next node in the 
       node list.
       Will return False if it doesn't, or the list of evidences for the connection
       if it does.
       """
    while self.cursor < self.max_connections:
        if len(self.connections) == 0:
            end = self.MAX_QUERY
            if self.max_connections - self.cursor < self.MAX_QUERY:
                end = self.max_connections - self.cursor
            self.connections.clear()
            self.connections = deque(ndb.model.get_multi_async(self.nodes[self.cursor:self.cursor+end]))

        connection = self.connections.popleft()
        connection_nodes = connection.get_result().connections

        if self.query in connection_nodes:
            connection_sources = connection.get_result().sources
            # yields (current node index in the list, sources)
            yield (self.cursor, connection_sources[connection_nodes.index(self.query)])
        self.cursor += 1

Aquí unNode tiene una propiedad repetidaconnections que contiene una matriz con otraNode IDs clave, y una coincidenciasources matriz a esa conexión dada.

Los resultados obtenidos se almacenan en un blobstore.

Ahora el problema que tengo es que después de una iteración de la función de conexión, la memoria no se borra de alguna manera. El siguiente registro muestra la memoria utilizada por AppEngine justo antes de crear una nuevaGetConnectedNodes ejemplo:

I 2012-08-23 16:58:01.643 Prioritizing HGNC:4839 - mem 32
I 2012-08-23 16:59:21.819 Prioritizing HGNC:3003 - mem 380
I 2012-08-23 17:00:00.918 Prioritizing HGNC:8932 - mem 468
I 2012-08-23 17:00:01.424 Prioritizing HGNC:24771 - mem 435
I 2012-08-23 17:00:20.334 Prioritizing HGNC:9300 - mem 417
I 2012-08-23 17:00:48.476 Prioritizing HGNC:10545 - mem 447
I 2012-08-23 17:01:01.489 Prioritizing HGNC:12775 - mem 485
I 2012-08-23 17:01:46.084 Prioritizing HGNC:2001 - mem 564
C 2012-08-23 17:02:18.028 Exceeded soft private memory limit with 628.609 MB after servicing 1 requests total

Aparte de algunas fluctuaciones, la memoria sigue aumentando, aunque no se acceda a ninguno de los valores anteriores. Me resultó bastante difícil depurar esto o averiguar si tengo una pérdida de memoria en algún lugar, pero parece que lo he rastreado hasta esa clase. Agradecería cualquier ayuda.

Respuestas a la pregunta(3)

Su respuesta a la pregunta