предложения для демона, который принимает для обработки zip-файлы

StackOverflow https://stackoverflow.com/questions/758466

  •  09-09-2019
  •  | 
  •  

Вопрос

я хочу написать демон, который:

  • читает сообщение из очереди (sqs, Rabbit-MQ, что угодно...), содержащее путь к zip-файлу
  • обновляет запись в базе данных, говоря что-то вроде «это задание обрабатывается»
  • считывает содержимое вышеупомянутого архива и вставляет строку в базу данных с информацией, полученной из метаданных файла для каждого найденного файла.
  • дублирует каждый файл на s3
  • удаляет zip-файл
  • помечает задание как «завершенное»
  • прочитать следующее сообщение в очереди, повторить

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

Я свободно владею Python, поэтому самое первое, что приходит на ум, — это написать простой сервер с Twisted для обработки каждого запроса и выполнения упомянутого выше процесса.но я никогда не писал ничего подобного, что могло бы работать в многопользовательском контексте.он не будет обслуживать сотни загрузок в минуту или час, но было бы неплохо, если бы он мог обрабатывать несколько одновременно, это разумно.Я также не очень хорошо знаком с написанием многопоточных приложений и решением таких проблем, как блокировка.

как люди решали эту проблему в прошлом?какие еще подходы я мог бы предпринять?

заранее спасибо за любую помощь и обсуждение!

Это было полезно?

Решение 3

я решила использовать комбинацию сельдерея (http://ask.github.com/celery/introduction.html), RabbitMQ и простое представление Django для обработки загрузок.рабочий процесс выглядит так:

  1. Представление django принимает, загружает магазины
  2. сельдерей Task отправляется для обработки загрузки.вся работа выполняется внутри Task.

Другие советы

я использовал Бобовый стебель в качестве демона очередей с очень хорошим эффектом (некоторая оперативная обработка и изменение размера изображения - за последние несколько недель их было уже более 2 миллионов).Бросьте сообщение в очередь с именем zip-файла (возможно, из определенного каталога) [я сериализую команду и параметры в JSON], и когда вы зарезервируете сообщение в своем рабочем клиенте, никто другой не сможет его получить, если вы не разрешите. истечет время ожидания (когда оно вернется в очередь для получения).

Остальное — разархивация и заливка на S3, для чего есть другие библиотеки.

Если вы хотите обрабатывать несколько zip-файлов одновременно, запустите столько рабочих процессов, сколько захотите.

Я бы не делал ничего многопоточного и вместо этого использовал очередь и базу данных для синхронизации столько рабочих процессов, сколько вам нужно запустить.

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

Будь проще.Скрипт Python запускается, проверяет очередь, выполняет какую-то работу, снова проверяет очередь.Если вам нужен подходящий фоновый демон, возможно, вам стоит просто отключиться от терминала, как описано здесь: Как создать демон в Python?

Добавьте некоторую регистрацию, возможно, блокировку try/Exception для отправки вам по электронной почте ошибок.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top