Google app engine, очень удобная и гибкая платформа, для веб разработки, но к сожалению постоянно приходится думать об ограничениях, налагаемых на процессорное время, объем занимаемой памяти, запросы к хранилищу, тем самым, организовывая нас, заставляя писать более оптимизированный код. С другой стороны, а что если действительно нужно выполнять сложную операцию, или «тяжелый запрос»? Тогда хотелось бы «спрятать», сложности и ограничения app engine внутрь изящного синтаксиса python. В данном случае предлагается использовать питоновые итератиры, для того, что бы прозрачно для пользователя, выбирать неограниченное количество записей из app engine. Хотя, как видно из кода, все-таки некоторые ограничения встроены в класс, в ствойстве _debug_limit.
Вот код итератора:
class QueryIter():
_limit_fetch = 1000
_items = None
_cursor = None
_debug_limit = 10000
def __init__(self, query):
self._query = query
self._fetchNext()
def _fetchNext(self):
self._items = iter(self._query.fetch(self._limit_fetch))
self._cursor = self._query.cursor()
def __iter__(self):
return self
def next(self):
self._debug_limit -= 1
if self._debug_limit < = 0:
raise StopIteration
else:
try:
result = self._items.next()
except StopIteration, e:
self._query.with_cursor(self._cursor)
self._fetchNext()
result = self._items.next() # raised exception stop the loop
return result
А вот, пример применения:
query = MyModel.all()
for i in QueryIter(query):
print i
7 comments On AppEngine, преодоление лимита в 1000 элементов на запрос
Ну почему никто не комментирует? Ведь изящнейшее решение!
А у _debug_limit откуда ноги растут? Это ограничение Gae на максимальное кол-во элементов в выборке? Или это вы сами добавили? Может стоит тогда последовательно вызывать проверку на наличие записей, и порождать новый цикл итераций?
_debug_limit это собственное ограничение, так сказать, здравого смысла, когда вы точно знаете что больше чем 100000 записей нет смыла выбирать
Ошибка в заголовке: “елементов” => “элементов”.
Спасибо. Исправил.
“Вод код”.
Решение удобное, можно в библиотеку его вынести.
_, Useful article – I am often interested in relevant articles. Some other sources you like to share? Will be checking back again to get a response =) …
Sliding Sidebar
About Me
Для кого этот блог?
Для тех кого интересуют современные интернет технологи, IT бизнес, стартапы, менеджмент, контроль качества, личная эффективность, мотивация. Здесь я буду писать о том, что в первую очередь будет интересно мне, о проблемах и решениях. О том что пригодилось мне, и возможно будет интересно Вам.
Что заставило меня создать его?
Желание совершенствоваться. Достигать успеха. Находить людей со схожими проблемами и задачами, вместе искать выходы и решения.
Немного о себе.
Мой первый серьезный опыт в IT это работа над desktop приложениями в компании «Эксперт-Софт». У истоков её стояли несколько амбициозных и талантливых молодых людей, с огнем в глазах и желанием работать «как майкрософт». То чем мы там занимались вполне могли бы сегодня назвать «стартапом». Рук было откровенно мало, поэтому приходилось заниматься всем: кодированием на Delphi, написанием скриптов на VBA, дизайном, вёрсткой и поддержкой вебсайта, работой над рекламной полиграфией, проектированием интерфейсов и БД. Работы было много, но запал был велик, команда очень разношерстная, гармонично дополняя друг-друга в решении нетривиальных задач. Благодаря тому что пришлось попробовать многое, постепенно вырисовалось понимание того чем хочется заниматься, и как. Софтверным программированием я был сыт по горло. Массы проблем десктопного софта в вебе просто не было, по определению. Зато был четкий фокус на дизайне, юзабилити, скорости. Поэтому когда пришла пора уходить из «Эксперт-Софт», я без всякого сожаления стал искать работу как разработчик для web. Поскольку городишко у нас не очень большой, выбор был практически предопределен. Так я стал работать в «Оникс-Системз», где и продолжаю работать поныне. За время работы в компании я как разработчик принимал участие в работе над несколькими десятками проектов. Несколько десятков проектов было сделано мною как фрилансером. Самым большим проектом в котором я сыграл роль менеджера, считаю свою семью. Также довольно большой проект мы сейчас поднимаем с командой разработчиков (на данный момент команда состоит из четырех php разработчиков, одного flex кодера и тестировщика). Отсюда, большой интерес к современным практикам и методологиям, разным подходам в управлении командой, повышению эффективности и качества работы. По мере сил, вдохновения и свободного времени, я буду писать об этом.
Если у Вас возникли какие-то вопросы ко мне лично, буду рад если Вы свяжетесь со мной:
e-mail:
skype: denis.sheremetov
Старый сайт, с музычкой и флешом
Прочая онлайновая деятельность: