AppEngine, преодоление лимита в 1000 элементов на запрос
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
О статье
Вы сейчас читаете статью «AppEngine, преодоление лимита в 1000 элементов на запрос»
- Написанную:
- 07.11.2010
- Категории:
- programming
6 Комментариев
Перейти к форме добавления комментария | comments rss[?] | trackback uri [?]