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