NDB não limpando a memória durante um longo pedido

No momento, estou descarregando um trabalho de execução longa para um TaskQueue para calcular as conexões entre as entidades do NDB no Datastore.

Basicamente, essa fila lida com várias listas de chaves de entidade que devem ser relacionadas a outraquery pelonode_in_connected_nodes função noGetConnectedNodes nó:

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

Aqui umNode tem uma propriedade repetidaconnections que contém uma matriz com outraNode IDs de chave e uma correspondênciasources matriz para essa conexão dada.

Os resultados obtidos são armazenados em um blobstore.

Agora, o problema que estou tendo é que, depois de uma iteração da função de conexão, a memória não é removida de alguma forma. O log a seguir mostra a memória usada pelo AppEngine antes de criar um novoGetConnectedNodes instância:

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

Além de algumas flutuações, a memória continua aumentando, mesmo que nenhum dos valores anteriores seja acessado. Eu achei muito difícil de depurar isso ou descobrir se eu tenho um vazamento de memória em algum lugar, mas eu pareço ter seguido até essa classe. Gostaria de receber ajuda.

questionAnswers(2)

yourAnswerToTheQuestion