Я пишу webservice в Django для обработки потоков изображений/видео, но в основном это делается во внешней программе. Например:django (или wsgi) цепочка stdout из подпроцесса
- клиентские запросы для
/1.jpg?size=300x200
- питон кода разборе
300x200
в Джанго (или другой WSGI приложение) - питона вызовов
convert
(часть Imagemagick) с помощьюsubprocess
модуля, с параметром 300x200 convert
читает 1.jpg с локального диска, конвертирует в размер соответственно- Запись в файл temp
- Django buil DS
HttpResponse()
и прочитать все содержимое временного файла в качестве тела
Как вы можете видеть, весь темп файла процесс чтения-записи, то неэффективно. Мне нужен общий способ работы с подобными внешними программами, например, не только convert
, но и другие, такие как cjpeg
, ffmepg
и т. Д. Или даже запатентованные двоичные файлы.
Я хочу осуществить это таким образом:
- питон получает стандартный вывод
fd
процессаconvert
ребенка - цепи его WSGI гнездо FD для вывода
Я сделал моя домашняя работа, Google говорит, что такая нуль-копия может быть выполнена с системным вызовом splice()
. но он недоступен в Python. Итак, как максимизировать производительность в Python для такого рода сценариев?
- Соединиться по вызову() используя
ctypes
? - hack memoryview() или buffer()?
- Подпроцесс имеет
stdout
который имеетreadinto()
, smogло использовать это как-нибудь? - Как мы можем получить номер fd для любого приложения WSGI?
Я добрая новичка к этим, любое предложение оценили, спасибо!
Это будет довольно дорогое порождать подпроцесс для каждого запроса. Как насчет использования ['PIL'] (http://www.pythonware.com/products/pil/) в том же процессе, а также во избежание создания временного файла? – Aya
1. Результат PIL не так хорош. 2. Я не имел в виду исключительно Imagemagick, но и другую внешнюю программу, ffmpeg, cjpeg и т. Д. – est
1. Какой алгоритм масштабирования вы используете в ImageMagick? 2. Многие обычно используемые внешние программы имеют привязки Python, которые будут намного быстрее, чем нерестущие подпроцессы, например. [Pyffmpeg] (http://code.google.com/p/pyffmpeg/). – Aya