Какой наиболее эффективный способ создания большого объема объектов хранилища данных в Google App Engine? - PullRequest
1 голос
/ 16 января 2012

У меня есть код, который примерно делает это внутри рабочей задачи GAE:

list_of_dicts = xmlrpc_call(...)
objects_to_put = []

for row in list_of_dicts.items():
    object = DatastoreModel(**row)
    object.x = ...
    objects_to_put.append(object)

db.put(objects_to_put)

Я тоже пробовал это:

list_of_dicts = xmlrpc_call(...)
objects_to_put = []

for row in list_of_dicts.items():
    object = DatastoreModel(**row)
    object.x = ...
    objects_to_put.append(object)
    if len(objects_to_put) > 10:
        db.put(objects_to_put)
        objects_to_put = []
db.put(objects_to_put)

(Идея состоит в том, чтобы размещать каждые 10 объектов, чтобы избежать огромного списка)

Проблема, неизменно, заключается в том, что этот блок кода , по-видимому, занимает огромные суммы памяти, хотя список относительно небольшой (~ 100 элементов), и каждый элемент в последнем содержит всего несколько ключи. Здесь нет больших пятен, больших кусочков нити или чего-либо, кроме сравнительно небольших структур данных картофеля.

Что заставляет этого работника превышать свою квоту памяти при каждом запуске, и как я могу эффективно создать относительно большое (~ 100 или около того) количество объектов хранилища данных?

1 Ответ

2 голосов
/ 16 января 2012

Я думаю, что второй метод и добавить ключевые слова del было бы лучше.Но трудно сказать, что он может решить ваши вопросы.

list_of_dicts = xmlrpc_call(...)
objects_to_put = []

for row in list_of_dicts.items():
    object = DatastoreModel(**row)
    object.x = ...
    objects_to_put.append(object)
    if len(objects_to_put) > 10:
        db.put_async(objects_to_put)
        del objects_to_put[:]

db.put_async(objects_to_put)

Существует инструмент AppTrace, который может отслеживать использование памяти на сервере разработки.Тем не менее, он работает только на сервере разработки.http://code.google.com/p/apptrace/wiki/UsingApptrace

Поскольку apptrace предназначен только для целей разработки и отладки, он работает с сервером приложений для разработки из Google App Engine Python SDK и TyphoonAE.Это определенно не будет работать в производственной среде GAE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...