我正在 Django 中编写一个 Web 服务来处理图像/视频流,但它主要是在外部程序中完成的。例如:
- 客户要求
/1.jpg?size=300x200
300x200
在 django(或其他 WSGI 应用程序)中解析 python 代码- python调用
convert
(Imagemagick的一部分)使用subprocess
模块,参数为300x200 convert
从本地磁盘读取 1.jpg,并相应地转换为大小- 写入临时文件
- Django 构建
HttpResponse()
并读取整个临时文件内容作为正文
如您所见,整个临时文件读写过程是低效的。我需要一种通用的方法来处理类似的外部程序,不仅如此convert
,还有其他类似cjpeg
的,ffmepg
等等,甚至是专有的二进制文件。
我想以这种方式实现它:
- python获取子进程
fd
的stdoutconvert
- 将其链接到 WSGI 套接字 fd 以进行输出
我已经完成了我的功课,谷歌说这种零拷贝可以通过系统调用来完成splice()
。但它在 Python 中不可用。那么如何在这种情况下最大化 Python 的性能呢?
ctypes
使用?调用 splice()- 破解 memoryview() 或 buffer() ?
- subprocess has
stdout
which hasreadinto()
,可以以某种方式使用吗? - 我们如何获得任何 WSGI 应用程序的 fd 编号?
我对这些有点新手,任何建议表示赞赏,谢谢!