Я хочу написать демон, который:
- читает сообщение из очереди (sqs, rabbit-mq, что угодно ...), содержащее путь к zip-файлу
- обновляет запись в базе данных, говоря что-то вроде "это задание обрабатывается"
- читает содержимое вышеупомянутого архива и вставляет строку в базу данных с информацией, полученной из метаданных файла для каждого найденного файла
- дублирует каждый файл на s3
- удаляет zip-файл
- помечает задание как «выполненное»
- прочитать следующее сообщение в очереди, повторить
это должно быть запущено как служба и инициировано сообщением, помещенным в очередь, когда кто-то загружает файл через веб-интерфейс. загрузчик не должен сразу видеть результаты, но загрузка будет обрабатываться в фоновом режиме довольно целесообразно.
Я свободно владею Python, поэтому первое, что приходит на ум, - это написать простой сервер с витой структурой для обработки каждого запроса и выполнения процесса, упомянутого выше. но я никогда не писал ничего подобного, что бы работало в многопользовательском контексте. он не будет обслуживать сотни загрузок в минуту или час, но было бы неплохо, если бы он мог обрабатывать несколько за раз, разумно. я также не очень хорошо знаком с написанием многопоточных приложений и с такими проблемами, как блокировка.
как люди решали это в прошлом? Какие еще подходы я могу использовать?
Заранее спасибо за любую помощь и обсуждение!