Бэкенд Django с рабочим celery - порог памяти

У меня есть система с некоторыми периодическими задачами. Каждая периодическая задача считывает файлы и создает из них объекты в оперативной памяти.

Для предотвращения потери данных содержимое кэшированного файла сразу же сохраняется из перидоической задачи в базу данных после создания из него объекта. Затем файл удаляется из источника.

Объект ставится в очередь в RabbitMQ, а рабочие Celery принимают его для дальнейшей обработки и параллелизма.

Перед кэшированием очередного файла с помощью psutil проверяется использование памяти в системе. Если оно превышает пороговое значение, периодическая задача прекращает чтение файлов и продолжает его при следующем выполнении.

Мой вопрос таков

  1. В принципе, это вполне осуществимый подход, если данные не должны быть потеряны (файлы либо хранятся в базе данных, либо все еще находятся в исходной папке)

  2. Если это хороший подход для сохранения низких усилий по синхронизации (файлы удаляются после чтения, рабочий работает с объектами и не удаляет файлы, и нет необходимости в синхронизации с периодической задачей)

  3. Какой порог памяти является "безопасным" и достаточно быстрым. Размер файла может достигать 40 МБ.

Вернуться на верх