Moviepy в ожидании ресурса - PullRequest
0 голосов
/ 11 июня 2019

Я использую moviepy, чтобы вставить текст в разные части видео в моем проекте Django.Вот мой код.

from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip
txt = TextClip('Hello', font="Tox-Typewriter")
video = VideoFileClip("videofile.mp4").subclip(0,31)
final_clip = CompositeVideoClip([video, txt]).set_duration(video.duration)
final_clip.write_videofile("media/{}.mp4".format('hello'),
  fps=24,threads=4,logger=None)
final_clip.close()

Я получаю видео, записанное в файл за 10 секунд, и показываю видео в браузере.Проблема в том, когда есть одновременные запросы к серверу.Допустим, на сервер поступило 5 одновременных запросов, тогда каждый ответ будет занимать 50 с каждый.Вместо того, чтобы давать каждый ответ в 10 секунд.Кажется, что есть какой-то ресурс, который используется всеми этими запросами, и один ждет, пока другой освободит ресурс.Но не смог выяснить, где это происходит.Я пытался использовать 5 отдельных файлов для каждого запроса, думая, что все запросы, открывающие один и тот же файл, является проблемой, но не сработало.Пожалуйста, помогите мне найти решение.

1 Ответ

0 голосов
/ 14 июня 2019

Так что, не зная больше о настройке вашего приложения, любые ответы на этот вопрос действительно будут выстрелом в темноте.

Как вы знаете, редактирование видео или любые изменения в нем будут ресурсоемкими.В этом случае вам гораздо удобнее загружать любую обработку в определенный исполнитель задач (celery, django-q).Это не только не будет удерживать открытые ресурсы сервера до тех пор, пока задача не будет завершена, это также означает, что вы можете перенести «работу» на машины, которые лучше подходят для этой работы (оптимизированы для работы с IO или с привязкой к ЦП (в зависимости от варианта использования).

В процессе разработки, если вы работаете с локальным сервером разработки, вы будете использовать только один процесс. Один процесс при отправке нескольких интенсивных запросов будет заблокирован. Можно использовать что-то вроде gunicorn или официантки и установитьчисло процессов до <1. </p>

Но, тем не менее, в какой-то момент вам придется переложить эту работу на обработчик задач, выполнение такой работы в производственной среде может привести к чрезмерному потреблению ресурсов веб-сервера.

В более техническом примечании ,

  • вы смотрели этот вопрос на github:

https://github.com/Zulko/moviepy/issues/645

Они говорят о передаче параметра `` progress_bar = False`. Если в вашем случае вы пишете 4 файла, и все они пишут в prИндикатор состояния может привести к затуханию ввода-вывода.

  • Кроме того, рассмотрите возможность использования профилировщика при репликации проблемы, так как это поможет вам лучше понять, где происходит узкое место (IO или ЦП).
...