Следует ли по возможности избегать использования subprocess.Popen и subprocess.call?
Не стоит.Код, которым вы поделились, - прямая задача, которую вы уже создали в python понятным и понятным способом.Зачем усложнять ваше решение дополнительными зависимостями и сложностью для одной быстрой задачи.Также утилита convert
работает для вас сегодня, но завтра может появиться другая внешняя утилита.
Есть ли большое преимущество в рефакторинге моего кода, чтобы не использовать модуль подпроцесса с точки зрения производительности, безопасности,и т. д.
Я бы сказал, что это только наименьшее преимущество для производительности, если НЕ вызывать системный вызов, но включение модуля-оболочки C-API, который динамически загружает разделяемые библиотеки, также будет примерно таким же.Кроме того, в зависимости от делегаций, возможно, что сам ImageMagick будет вызывать системный вызов.
В целях безопасности ваше приложение по-прежнему отвечает за очистку переменных.Я также хотел бы предложить ...
- Чтение на Политики безопасности с IM
- Убедитесь, что
subprocess.call
не может быть доступ из внешних ресурсов.(т. е. если решение находится на веб-сервере, перенесите задачи на удаленного работника очереди) - Улучшение обработки ошибок и предупреждений.Они встречаются чаще, чем вы думаете!
Аргументы ЗА переключение
Общие обоснования, которые я могу придумать ...
- Сокращение ввода-вывода, поскольку данные изображения уже находятся в памяти Python.
- Задачи являются динамическими на основе алгоритма (например, генераторы мемов).
- Обычные итераторы пикселей
- Препроцессоры OCR / CV
Опять же, у вас действительно нет аргументов для оправдания переключения.По крайней мере, не сегодня.