Рубрики
Без рубрики

Go VS PY

TL; DR Сравнение Go и Python для времени выполнения кода, работа с изображениями Docker и нативным пакетом … Tagged with Go, Python, Docker.

TL; DR Сравнение Go и Python для времени выполнения кода, работа с изображениями Docker и распределением собственных пакетов.

Недавно я работал над программированием, и я подумал, что было бы интересно иметь реализацию как в Go, так и в Python.

Задача Состоит из обработки набора данных (в частности, CSV ~ 100 МБ), сделайте несколько агрегаций и выводит файл JSON, который будет использоваться в качестве источника данных для обслуживания ряда конечных точек API REST.

Что мы сравниваем?

Но достаточно с Chit-Chat, давайте копаем примерно сравнение.

Время исполнения : Разница во времени в скорости между двумя реализациями для выполнения алгоритма агрегации данных.

Docker Image : Сложность в создании изображения Docker и размера сгенерированных изображений.

Нативное распределение : Простота использования для установки и запуска приложения в собственной среде (он же на вашем ноутбуке).

Немного контекста

Оба приложения доступны на GitHub, Здесь версия GO и Здесь Python One.

В частности, мы будем сравнивать Plz Go v0.2.1 с Plz py v0.1.3

Версия Go и Python соответственно GO-1.13.8 и Python-3.8.5 Анкет

Обе реализация довольно мала:

  • Пожалуйста, Go: 250 лок
  • Plz py: 191 лок ( ~ 23% меньше)

Метрики, генерируемые с Tokei с использованием:

  • для go tokei -f -e = "*_ test.go
  • для py tokei -f

Обе реализации используют один и тот же идентичный последовательный алгоритм для обработки данных, и как вход, так и выходные данные одинаковы.

Средняя скорость 1 Для обработки входа CSV ~ 100 МБ на выходной сигнал 32K JSON:

Pzl Go: ~ 0,6 с (~ 2,2 раза быстрее) Plz py: ~ 1,3 с

Реализация алгоритма находится в массаж Функция: Здесь, в V0.1.3 для Python и Здесь, в v0.2.1 для Go

Если вы копаете код и обнаружите некоторую очевидную проблему, влияющую на производительность, дайте мне знать в комментариях.

Здесь не так много, что в этом сценарии в два раза быстрее, чем Python.

Лучший : Идти

Поскольку приложение предоставляет API REST для обслуживания результатов агрегации, имеет смысл отправить приложение в качестве изображения Docker.

Подход к созданию изображения Docker состоит в том, чтобы использовать многоэтапную сборку: сначала построить приложение и собрать данные, а затем собрать изображение «производства».

Для этого критерия go – это лучшее, вы можете указать компилятору построить самоспоращенный двоичный файл, чтобы быть пакетом в царапать Изображение для Полученное изображение Размер чуть больше 9 МБ (сжатый 3,5 МБ).

С другой стороны, с Python, финал Изображение (на основе 3.8-Slim-Buster )-это ошеломляющее 175 МБ (сжатый 55 МБ). Это связано со многими слоями, которые составляют 3.8-Slim-Buster Таким образом, базовое изображение, существует место для улучшения путем создания пользовательского изображения, но это, вероятно, потребует значительных усилий для сборки и технического обслуживания.

Pzl Go: ~ 9,3 МБ – (18x меньше) plz py: ~ 175mb

Лучший : Идти

Под нативным распространением я хочу установить приложение на сервере или на ваш ноутбук, не применяя слишком много с требования к программному обеспечению Анкет Я твердо верю, что это важный показатель, поскольку наличие сложных процедур установки включает в себя много когнитивных усилий, которые в конечном итоге потрачены впустую.

В этой области и Go, и Python более или менее эквивалентны на поверхности, с Go вы можете установить пакет, работающий Получите github.com/noandrea/plz и с питоном, использующим PIP установка PLZPY Анкет

Предостережение заключается в том, что Python гораздо более популярен и по умолчанию по умолчанию по умолчанию, в то время как для Go вам, вероятно, придется загрузить и установить инструментарий GO.

Другое заметное отличие состоит в том, что с PIP установка Вы устанавливаете «двоичное» распределение, находясь с иди возьми Вы получаете исходный код и собираете его локально.

Стоит упомянуть, что сопровождающие (ы) пакета GO, возможно, отправили двоичные файлы для специфических архитектур и менеджеров пакетов ( Brew , dnf , apt , …), но это требует дополнительной работы и обслуживания.

Немного лучше : Питон

Выводы

Я надеюсь, что вам понравилось это сравнение так же, как и я, и о том, какое лучшее, иди или питон, ответ … 🥁 … оба и ни один 😉!

👋

  1. согласованно по нескольким выполнениям ↩

Оригинал: “https://dev.to/noandrea/go-vs-py-419o”