Как добавить список задач в Redis редис Python
Есть одна задача и она разбита на кучу подзадач. Допустим, вы запустили кучу подзадач которые что-то делают. Вам необходимо записывать все результаты выполненных подзадач в массив для отчётности. Как только все задачи выполнятся, то мы должны удалить результаты выполненных подзадач. Для решения данной задачи мы будем использовать библиотеку 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 удалена.")
Объяснение кода:
- **Настройка Redis**: Подключаемся к локальному серверу Redis.
- **Генерация UUID**: Создается уникальный идентификатор для задачи.
- **Функция add_to_array**:
- Получает текущий массив из Redis с помощью r.get.
- Если массив существует, десериализует его из JSON. Если нет, инициализирует новый массив.
- Добавляет новый элемент в массив и сериализует его обратно в JSON, сохраняя в Redis.
- **Цикл**: В данном примере мы добавляем 5 элементов в массив с небольшой задержкой между добавлениями.
- **Удаление задачи**: После завершения работы цикла удаляем массив из Redis по uuid.
Эта структура позволяет вам удобно добавлять и удалять данные в Redis, используя уникальные идентификаторы для задач.
Можно эту задачу упростить. Вы можете не делать большой массив с подзадачами. Этот способ хорош для большого объема задач. Вам нужно сохранять подзадачи по более длинному ключу task_id + '-' + subtask.
# Генерация уникального идентификатора для задачи
task_uuid = f"{task_id}-{str(uuid.uuid4())}"
После того как вы сделали все подзадачи, то вам необходимо проверить все подзадачи. Бывает так, что скрипт не удаляет все подзадачи из-за различных ошибок. Вы должны проверить оставшиеся подзадачи на существования. Подзадач не должно быть! Если есть подзадачи, то вы можете их перезапустить или удалить. Смотрите подробности в статье как получить элементы не зная названия Redis Python.