Как обрабатывать массив «4», возвращаемый конвейером redis-py.execute ()?

#python #redis #pipeline #bulkinsert #redis-py

Вопрос:

Я использую redis-py для обработки массовых вставок в хранилище Redis.

Я написал следующий очень простой метод:

 import redis

def push_metadata_to_redis(list_of_nested_dictionaries):

    redis_client = redis.Redis(host='localhost', port=6379, db=0)
    redis_pipeline = redis_client.pipeline(transaction=False)

    for dictionary in list_of_nested_dictionaries:
        for k, inner_dict in dictionary.items()
            redis_pipeline.hset(k, mapping=inner_dict)

        result = redis_pipeline.execute(raise_on_error=True)
        print(result)
 

В основном это:

  1. принимает на вход список из нескольких тысяч словарей
  2. для каждого из этих словарей вставьте в Redis каждый элемент ключа/значения (значения также являются словарями, поэтому я использую hset )

Каждый dictionary содержит ~10 тыс. элементов, так redis_pipeline.execute(raise_on_error=True) происходит раз в ~10 hset тыс.

Я заметил, что через несколько минут result значение переходит от массивов 0 s к массивам 4 s, и это меня беспокоит.

С одной стороны, я ожидаю, что любая ошибка должна быть вызвана как исключение ( raise_on_error=True ), но с другой стороны, я не могу найти никаких ссылок на это поведение в документации, и я не понимаю, что это значит.

Поэтому мои вопросы таковы:

  1. Означает ли значение result равно массиву 4 s, что в операции что-то пошло не так redis_pipeline.execute(raise_on_error=True) ?
  2. Если да, то как я могу понять, что пошло не так?
  3. Если нет, то что это значит вместо этого?

Заранее спасибо.

Ответ №1:

Комментарии:

1. Это окончательно ответило на мой вопрос, спасибо. 🙂