Автор оригинала: Akhil Lawrence.
Начните писать здесь Иногда вы хотите получить огромный набор данных и выполнить итерацию/цикл над ним, чтобы выполнить какую-то операцию. Извлечение их всех в память сразу может заблокировать серверные процессы. Чтобы избежать таких проблем и выполнить итерацию по набору данных, вы можете использовать протокол python Iterator
. Прочитайте следующее, чтобы лучше понять итераторы,
Официальная документация Python об итераторах Учебник по практике Python
Во время итерации по набору данных на самом деле python вызывает метод __next__
итеративного. Поэтому, если вы хотите получить огромный набор данных, вы можете сделать это несколькими небольшими партиями/кусками с помощью __next__
. Сначала извлеките небольшую часть набора данных, а когда будет достигнут конец небольшой части, извлеките следующий небольшой раздел. Таким образом, вы можете получить и обработать весь набор данных без каких-либо сложностей.
Преимущество использования Протокол итератора
программист может интерпретировать итерацию как один цикл. Он не должен беспокоиться о получении результатов небольшими кусками, об этом позаботился Итератор
.
#! /usr/bin/python class QueryIterator(object): query = None results = None def __init__(self, query=None): self.query = query def __iter__(self): return self def next(self): try: """ Logic to return next entry in self.results """ pass except StopIteration: """ Logic to populate results again ( eg: call populate_date() ) and return the next entry in self.results """ pass def populate_data(self): """ Logic to execute query in small batches/chunks and store results in self.results """ pass...