Рубрики
Без рубрики

Извлечение огромных наборов данных с использованием протокола итератора

Чтение больших наборов данных с использованием протокола итератора в Python

Автор оригинала: 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...