我的方法如下:
import os
os.execl('/usr/bin/python', '/usr/bin/python', '/home/pi/Gen/Binary2.py')
它是一个简单的ASP.NET Web应用程序,它通过id从DB中的表转换文件。该表还有" dest_path"和" input_path"领域。表仅包含本地文件的路径。例如D:/example/file.mp3
但是当它开始转换时,转换器使用的CPU时间百分比非常小。少于所有能力的0.1%。当我开始一些转换器操作(发送一些请求)时,它变得更少。
我尝试使用Web Garden但结果相同。如何增加请求的CPU使用率? 完整代码:https://codeshare.io/7XMec
答案 0 :(得分:1)
在没有看到其余代码的情况下,很可能您的问题是您正在使用带有SQL Server的缓冲I / O API。这意味着FFMpeg进程的第一个字节的时间是EntityFramework进程的最后一个字节的时间。解决方案?
您需要替换所有EF并通过SqlFileStream
类访问您的数据库。然后,您需要将数据传输到FFMPeg进程,而不是使用文件/字节数组。
看起来您需要使用FFMpegConverter.ConvertLiveMedia
方法而不是FFMpegConverter.ConvertMedia
方法来实现此目的。总的来说,你仍然会发现你可能是I / O绑定而不是CPU绑定。
但是,将来,您应该让自己成为调试性能问题的探查器。
答案 1 :(得分:1)
您对症状的解释是完全错误的。
通过使用这样的异步操作并启动转换器,设计上看到w3wp.exe几乎不占用任何CPU资源,因为它只是等待转换器任务完成。
同时,在ASP.NET中执行长时间运行任务是一种糟糕的设计,因为该框架是为具有适度超时的简单快速任务而设计的。诸如SignalR之类的框架可能是更好的选择。
Web Garden会帮助你,但在高负载下不会有太多帮助,好像所有线程都在转换器上等待,站点性能仍然很差,因为它不能轻易地旋转一个免费线程。