Форум сайта python.su
Привет, python.su.
Столкнулся с проблемой из-за неопытности, прошу вашей помощи.
Стоит задача:
есть бинарный файл (3-6Мб), который нужно отдавать клиентам в измененном виде. Изменять “на лету” не вариант (1-2 минуты на процедуру), поэтому хотел узнать у опытных товарищей, как это лучше реализовать. Изначально думал написать бэкэнд-демон, который будет его изменять и ложить результат в очередь, из которой они будут доставаться и отдаваться клиентам. Нужно чтобы каждая копия уходила лишь одному клиенту. Копии не имею каких-либо признаков, и flask не сможет выбирать их по id или названию. Хотелось бы что-то похожее на Queue и её put() и get() методы, но для файлов.
Вопрос:
Как это лучше реализовать с точки зрения архитектуры, и какое хранилище (очередь) лучше выбрать, чтобы выбрав файл он автоматически выпадал из очереди и два клиента не могли его получить обратившись одновременно.
UPD:
Я склоняюсь к redis-queue и Mongo GridFS. RQ будет создавать и запускать воркеры на модификацию файла, сохранять файл в GridFS, получать _id и хранить его в очереди. Если клиент обращается за файлом, flask берет _id из очереди, обращается с ним к GridFS отдаёт и удаляет файл. Это будет нормальным подходом?
Отредактировано Galvanize (Фев. 11, 2020 17:45:00)
Офлайн
GalvanizeНе имеют признаков - создай эти признаки.
Нужно чтобы каждая копия уходила лишь одному клиенту. Копии не имею каких-либо признаков, и flask не сможет выбирать их по id или названию.
GalvanizeТак ты используй её для путей к файлам. Пути делаешь уникальными, кладёшь в очередь эти пути, а Flask использует путь для взятия файла и отправки его. Потом путь удаляется и, соотвественно, Flask его больше использовать не может.
Хотелось бы что-то похожее на Queue и её put() и get() методы, но для файлов.
Отредактировано py.user.next (Фев. 12, 2020 01:50:10)
Офлайн