Как я могу передать Python stdout (или ведение журнала) в соединение Redis?
Есть долгая работа, для которой мне нужно вести журналы в реальном времени. Невозможно дождаться завершения задания, чтобы получить журналы, в случае сбоя должна быть запись о том, что произошло.
Мне удалось записать вывод журнала на стандартный вывод в буфере StringIO, который можно прочитать после завершения длительной работы.
Я не могу понять, как заставить этот буфер взаимодействовать с клиентом Redis в реальном времени, пока задание все еще выполняется.






Я понял:
from io import StringIO
class RedisHandler(StringIO):
def __init__(self, key, redis_client):
"""
Create a new StringIO interface for the given key and redis_client.
"""
StringIO.__init__(self)
self.key = key
self.redis_client = redis_client
def write(self, record):
"""
Publish record to redis logging list
"""
self.redis_client.lpush(self.key, record)
В основном скрипте я перенаправляю stdout + stderr в экземпляр RedisHandler. Redis действует как конечная точка для StringIO и добавляет каждую строку из вывода журнала в список.
Отличное решение! Мне интересно, как производительность хранения журналов в списке Redis, например, Redis может обрабатывать список, в котором хранятся журналы до 10K элементов и т. д.