Moviepy等待资源

时间:2019-06-11 10:15:12

标签: python django moviepy

我正在使用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 :(得分:0)

因此,在不了解您的应用程序设置的更多信息的情况下,对这个问题的任何答案都将是黑暗中的一枪。

您知道编辑视频或对视频进行任何更改都会占用大量资源。在这种情况下,实际上将所有处理加载到特定任务运行程序(celery,django-q)要好得多。在任务完成之前,这不仅不会占用开放的服务器资源,还意味着您可以将“工作”卸载到更适合该工作的计算机上(针对IO或CPU绑定的工作进行了优化(取决于用例)。) >

在开发中,如果使用本地开发服务器运行,则将仅使用一个进程。当一个进程发送多个密集请求时,将被阻塞。您可以考虑使用诸如gunicorn或女服务员之类的东西,并将进程数设置为<1。

但是,仍然需要在某些时候将这项工作分担给任务运行器,在生产环境中进行此类工作可能会导致Web服务器资源的过度消耗。

在更多技术说明上

  • 您是否在github上查看了此问题:

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

他们谈论传递参数``progress_bar = False''。如果在用例中要写入4个文件,并且它们都写入进度条,则可能会淹没IO。

  • 此外,考虑在复制问题时运行探查器,它可能使您更好地了解瓶颈发生的位置(IO或CPU)。