Генераторы стали основой для работы с непрерывными потоками информации: live-метрики, события IoT, стримы логов и real-time аналитика
Например генератор потока данных от сенсора
import time
import random
def sensor_stream(sensor_id):
"""Поток показаний сенсора"""
value = 50.0
while True:
value += 1 # Новое показание
yield {
'sensor': sensor_id,
'value': value,
'timestamp': time.time()
}
time.sleep(1) # Задержка между измерениями
Фильтрация + агрегация на лету
def process_stream(stream, max_value=100):
"""Фильтрует аномалии и считает среднее за последние 5 значений"""
buffer = []
for point in stream:
if 0 < point['value'] < max_value: # Фильтрация
buffer.append(point['value'])
buffer = buffer[-5:] # Последние 5 значений
point['avg'] = sum(buffer) / len(buffer)
yield point
Применение в мониторинге систем
# Создаём поток данных
stream = sensor_stream('server_temp')
processed = process_stream(stream)
# Мониторим
for point in processed:
print(f"{point['sensor']}: {point['value']}°C (avg: {point['avg']:.1f})")
if point['avg'] > 30:
print("⚠️ Внимание")
Ключевые преимущества такого подхода:
1. Композируемость — генераторы легко объединяются в цепочки
2. Ресурсная эффективность — не храним полные массивы данных
3. Раннее обнаружение проблем — многие проблемы видно сразу, а не после обработки всего массива
⚡️ Генераторы позволяют обрабатывать данные в момент их появления, что критично для систем, в которых нужно отслеживать данные в реальном времени
⭐️ Пост Guru Python:
Сергей Филичкин