Comments 22
Ваш converting.py я бы вынес как Task в Celery, который хорошо интегрируется с Django с Redis в качестве бэкенда очереди. Навскидку os.system поломается с пробельными именами, все же рекомендуется subprocess использовать для таких вещей.
+2
Спасибо, учту!
Всё же буду выкладывать проект на github, там как раз воспользуюсь Вашими замечаниями.
Всё же буду выкладывать проект на github, там как раз воспользуюсь Вашими замечаниями.
+1
Offtopic: насчет redis и celery. Как раз вчера с багом разобрался наконец: если используются события, то после первого перезапуска celery-воркеров redis начинает забиваться ненужной ерундой, и с каждым перезапуском скорость забивания возрастает( у меня, например, мегабайт 100 в день было, что для in-memory базы очень критично). Причем, судя по коду, этот баг был всегда, и мне кажется, что у всех, кто использует redis+celery+мониторинг, redis должен быть забит большей частью ненужной ерундой сейчас. По крайней мере, после ручного удаления всего хлама и применения полу-фикса (в комментариях) размер базы с 250M до 2M снизился.
Ask частичный воркэраунд закоммитил (крутой чел, там голову сломать можно), но ни в каких релизах этого пока нет. Так что используйте celery+redis сейчас с осторожностью, а если уже используете, то обновите celery и kombu до последних версий с гитхаба, прочтите внимательно описание бага и посмотрите, не удастся ли уменишьть базу раз эдак в 100, удалив ненужные ключи и перезапустив redis.
Ask частичный воркэраунд закоммитил (крутой чел, там голову сломать можно), но ни в каких релизах этого пока нет. Так что используйте celery+redis сейчас с осторожностью, а если уже используете, то обновите celery и kombu до последних версий с гитхаба, прочтите внимательно описание бага и посмотрите, не удастся ли уменишьть базу раз эдак в 100, удалив ненужные ключи и перезапустив redis.
+1
В принципе можно было обойтись одним gdata. Пример есть в документации: code.google.com/apis/youtube/1.0/developers_guide_python.html#DirectUpload
+1
Да-да, гитхаб было бы очень здорово. Заранее спасибо.
+1
Отличная статья. Спасибо!
+1
Я как-то раз делал что-то подобное, только не загрузку на youtube, а конвертацию принятых от пользователей файлов в .flv. Тоже была очередь и конвертация ffmpeg'ом. Только вот сам скрипт конвертации я делал демоном: очень удобно, он постоянно висит и смотрит, не появилось ли чего в очереди, и не надо проверять чтобы другой файл одновременно не конвертировался. Может быть вам стоит попробовать сделать тоже демоном, а не запуск из crontab.
А, и еще, лучше всего ffmpeg запускать командой nice -n 20, чтобы процесс конвертации имел приоритет пониже, иначе, пока будет конвертироваться, все остальное будет дико тормозить)
А, и еще, лучше всего ffmpeg запускать командой nice -n 20, чтобы процесс конвертации имел приоритет пониже, иначе, пока будет конвертироваться, все остальное будет дико тормозить)
+2
Почему-то мне кажется, что файл 03_praktikantki.mov на youtube лучше не выкладывать :) А за статью спасибо!
+6
По-хорошему, сразу можно лить нормальный mp4 в H.264, а не .flv, а для этого нужно ffmpeg ставить с libfaac0 (из мультиверса) и libavcodec-extra-52 (с медибунту), тогда x264 будет полноценно работать. Вплоть до Маверика актуально, в Натти, кажись, сразу экстра есть. И да, не забывать про «-fpre», после которого нужно указывать путь к пресетам x264.
+1
> материалы у нас готовятся в формате mov, а средний вес 15
> минутной программы = 3,5Гб. Заливать файл такого размера
> утомительно и глупо, гораздо правильнее будет конвертировать
> ролики в mp4 (например)
Простите, не удержался. MOV и MP4 — это всего лишь контейнеры для хранения аудио/видео потоков, которые к формату имеют весьма посредственное отношение, их указание само по себе ничего не говорит читателю про видео, которое в них хранится.
Правильнее было бы указать разрешение и битрейт видео, ну и кодек не помешает, чтобы не удивляться как это видео с одинаковым разрешением может различаться битрейтом в 30 раз.
> минутной программы = 3,5Гб. Заливать файл такого размера
> утомительно и глупо, гораздо правильнее будет конвертировать
> ролики в mp4 (например)
Простите, не удержался. MOV и MP4 — это всего лишь контейнеры для хранения аудио/видео потоков, которые к формату имеют весьма посредственное отношение, их указание само по себе ничего не говорит читателю про видео, которое в них хранится.
Правильнее было бы указать разрешение и битрейт видео, ну и кодек не помешает, чтобы не удивляться как это видео с одинаковым разрешением может различаться битрейтом в 30 раз.
+1
По поводу os.system и Celery уже сказали, придерусь тогда вот к чему:
> enter и exit — самая простая аутентификация.
Можно проще. См
далее, вместо
используем декоратор
Что за моделька People не понял… Возможно стоит обратить внимание на профили docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users Или это оно и есть?
И, в завершение, попробуйте использовать TemplateResponse вместо render_to_response. Они более функциональные и их можно удобно обрабатывать в Middleware потом.
> enter и exit — самая простая аутентификация.
Можно проще. См
django.contrib.auth.views.login
docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.views.loginдалее, вместо
if request.user.is_authenticated():
return HttpResponseRedirect('/')
используем декоратор
@login_required
из django.contrib.auth.decorators
Что за моделька People не понял… Возможно стоит обратить внимание на профили docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users Или это оно и есть?
И, в завершение, попробуйте использовать TemplateResponse вместо render_to_response. Они более функциональные и их можно удобно обрабатывать в Middleware потом.
+2
seriyPS, спасибо за замечание.
Про декоратор @login_required мне тоже уже рассказали. Менять в статье не стал, т.к. новый вариант с учётом всех «пожеланий» будет на github (вот линк https://github.com/1vank1n/YTupload).
Да это и есть «профиль». Сделал его на будущее, дабы была возможность закрепить пользователя за определённым плейлистом, либо добавление дополнительной инфы, может быть какая статистика, чтоб записывалась.
Про TemplateResponse посмотрю, не встречал.
Про декоратор @login_required мне тоже уже рассказали. Менять в статье не стал, т.к. новый вариант с учётом всех «пожеланий» будет на github (вот линк https://github.com/1vank1n/YTupload).
Что за моделька People не понял…
Да это и есть «профиль». Сделал его на будущее, дабы была возможность закрепить пользователя за определённым плейлистом, либо добавление дополнительной инфы, может быть какая статистика, чтоб записывалась.
Про TemplateResponse посмотрю, не встречал.
0
Пожалуй продолжу:
Импортировать settings напрямую не рекомендуется. Юзайте основной settings файл Django и
Куча неиспользуемых импортов во вьюхе типа
А чего-это у вас в
Импортировать settings напрямую не рекомендуется. Юзайте основной settings файл Django и
from django.conf import settings
docs.djangoproject.com/en/dev/topics/settings/#using-settings-in-python-codeКуча неиспользуемых импортов во вьюхе типа
from django.shortcuts import get_object_or_404, get_list_or_404
и from django.template import RequestContext
etc.А чего-это у вас в
<form method="post" name="uploadform">
CSRF токен не используется?*/1 * * * * python /var/www/YTupload/converting.py &> /dev/null
*/1 можно заменить на просто * если я правильно помню{% if not d.status %}<a value="{{ d.filename }}" href="#">{% endif %}{{ d.filename }}</a>
Если d.status есть, то останется бесхозный тег </a>
+1
Спасибо, учту!
Про csrf-токен не волновался потому, что в-первую очередь это для внутреннего использования, но в билде это учту.
Да, {% if %} здесь стоит повторить для чистоты кода, а вообще он используется здесь, чтобы не было соблазна один и тотже файл 2 раза закачать.
CSRF токен не используется?
Про csrf-токен не волновался потому, что в-первую очередь это для внутреннего использования, но в билде это учту.
{% if not d.status %}<a value="{{ d.filename }}" href="#">{% endif %}{{ d.filename }}</a>
Да, {% if %} здесь стоит повторить для чистоты кода, а вообще он используется здесь, чтобы не было соблазна один и тотже файл 2 раза закачать.
0
Sign up to leave a comment.
Конвертируем и загружаем на YouTube