Найти - Пользователи
Полная версия: Flask - выдача и хранени файлов на скачку
Начало » Web » Flask - выдача и хранени файлов на скачку
1
Galvanize
Привет, python.su.
Столкнулся с проблемой из-за неопытности, прошу вашей помощи.
Стоит задача:
есть бинарный файл (3-6Мб), который нужно отдавать клиентам в измененном виде. Изменять “на лету” не вариант (1-2 минуты на процедуру), поэтому хотел узнать у опытных товарищей, как это лучше реализовать. Изначально думал написать бэкэнд-демон, который будет его изменять и ложить результат в очередь, из которой они будут доставаться и отдаваться клиентам. Нужно чтобы каждая копия уходила лишь одному клиенту. Копии не имею каких-либо признаков, и flask не сможет выбирать их по id или названию. Хотелось бы что-то похожее на Queue и её put() и get() методы, но для файлов.

Вопрос:
Как это лучше реализовать с точки зрения архитектуры, и какое хранилище (очередь) лучше выбрать, чтобы выбрав файл он автоматически выпадал из очереди и два клиента не могли его получить обратившись одновременно.

UPD:
Я склоняюсь к redis-queue и Mongo GridFS. RQ будет создавать и запускать воркеры на модификацию файла, сохранять файл в GridFS, получать _id и хранить его в очереди. Если клиент обращается за файлом, flask берет _id из очереди, обращается с ним к GridFS отдаёт и удаляет файл. Это будет нормальным подходом?
py.user.next
Galvanize
Нужно чтобы каждая копия уходила лишь одному клиенту. Копии не имею каких-либо признаков, и flask не сможет выбирать их по id или названию.
Не имеют признаков - создай эти признаки.

Galvanize
Хотелось бы что-то похожее на Queue и её put() и get() методы, но для файлов.
Так ты используй её для путей к файлам. Пути делаешь уникальными, кладёшь в очередь эти пути, а Flask использует путь для взятия файла и отправки его. Потом путь удаляется и, соотвественно, Flask его больше использовать не может.

Путь - понятие абстрактное. Это не обязательно путь на диске. Это может быть ссылка на что-то, из чего можно сгенерировать путь к файлу на диске.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB