training-web.ruГлавнаяКатегорииО насКарта сайтаПоискТёмная тема

Категории

Как добавить список задач в Redis редис Python

Создано: 02 марта 2025Автор: Егор Астапов43 просмотраСложность: легкий

Есть одна задача и она разбита на кучу подзадач. Допустим, вы запустили кучу подзадач которые что-то делают. Вам необходимо записывать все результаты выполненных подзадач в массив для отчётности. Как только все задачи выполнятся, то мы должны удалить результаты выполненных подзадач. Для решения данной задачи мы будем использовать библиотеку redis для подключения к Redis из Python. Мы будем записывать массив в Redis с ключом, определяемым uuid, а затем, по завершении работы с массивом, мы удалим этот ключ вместе с массивом данных.

import redis
import uuid
import json
import time

# Настройка соединения с Redis
r = redis.Redis(host='localhost', port=6379, db=0)

# Генерация уникального идентификатора для задачи
task_uuid = str(uuid.uuid4())

# Функция для добавления элемента в массив
def add_to_array(task_uuid, element):
# Получаем текущий массив из Redis (если он существует)
array_str = r.get(task_uuid)

if array_str:
# Десериализуем массив из JSON
array = json.loads(array_str)
else:
# Если массив не существует, создаем новый
array = []

# Добавляем новый элемент в массив
array.append(element)

# Сериализуем массив обратно в JSON и сохраняем в Redis
r.set(task_uuid, json.dumps(array))

# Пример цикла, добавляющего элементы в массив
for i in range(5): # Допустим, вы хотите добавить 5 элементов
element = {"status": "ok", "text": str(i)}
add_to_array(task_uuid, element)
time.sleep(1) # Имитация задержки между добавлениями

# После завершения работы цикла удаляем задачу по uuid
r.delete(task_uuid)
print(f"Задача с UUID удалена.")

Объяснение кода:

  1. **Настройка Redis**: Подключаемся к локальному серверу Redis.
  2. **Генерация UUID**: Создается уникальный идентификатор для задачи.
  3. **Функция add_to_array**:
    • Получает текущий массив из Redis с помощью r.get.
    • Если массив существует, десериализует его из JSON. Если нет, инициализирует новый массив.
    • Добавляет новый элемент в массив и сериализует его обратно в JSON, сохраняя в Redis.
  4. **Цикл**: В данном примере мы добавляем 5 элементов в массив с небольшой задержкой между добавлениями.
  5. **Удаление задачи**: После завершения работы цикла удаляем массив из Redis по uuid.

Эта структура позволяет вам удобно добавлять и удалять данные в Redis, используя уникальные идентификаторы для задач.

Можно эту задачу упростить. Вы можете не делать большой массив с подзадачами. Этот способ хорош для большого объема задач. Вам нужно сохранять подзадачи по более длинному ключу task_id + '-' + subtask.

# Генерация уникального идентификатора для задачи
task_uuid = f"{task_id}-{str(uuid.uuid4())}"

После того как вы сделали все подзадачи, то вам необходимо проверить все подзадачи. Бывает так, что скрипт не удаляет все подзадачи из-за различных ошибок. Вы должны проверить оставшиеся подзадачи на существования. Подзадач не должно быть! Если есть подзадачи, то вы можете их перезапустить или удалить. Смотрите подробности в статье как получить элементы не зная названия Redis Python.

Комментарии

реклама