Python vs Bash – В каких задачах каждый из них превосходит другие по производительности?

Очевидно, что Python более удобен для пользователя, быстрый поиск в google показывает много результатов, которые говорят, что, поскольку Python байт-скомпилированный, как правило, быстрее. Я даже нашел это, что утверждает, что вы можете увидеть улучшение более чем на 2000% в словарных операциях.

Каков ваш опыт в этом вопросе? В какой задаче каждый из них является явным победителем?

  • В чем разница между json.dump () и json.dumps () в python?
  • Невозможно импортировать cv2 в python в OSX
  • Django: Как создать форму множественного выбора?
  • Перевести код matlab на python (scipy)
  • Вызов скрипта python из C ++ и использование его вывода
  • Область действия переменной python для цикла
  • Установленный virtualenv и virtualenvwrapper: Python говорит, что ни один модуль с именем virtualenvwrapper
  • Как создать клонирование MS Paint с помощью Python и pygame
  • 9 Solutions collect form web for “Python vs Bash – В каких задачах каждый из них превосходит другие по производительности?”

    Типичный поток мейнфреймов …

    Input Disk/Tape/User (runtime) --> Job Control Language (JCL) --> Output Disk/Tape/Screen/Printer | ^ v | `--> COBOL Program --------' 

    Типичный поток Linux …

     Input Disk/SSD/User (runtime) --> sh/bash/ksh/zsh/... ----------> Output Disk/SSD/Screen/Printer | ^ v | `--> Python script --------' | ^ v | `--> awk script -----------' | ^ v | `--> sed script -----------' | ^ v | `--> C/C++ program --------' | ^ v | `--- Java program ---------' | ^ v | : : 

    Оболочки – это клей Linux

    Оболочки Linux, такие как sh / ksh / bash / … предоставляют средства ввода / вывода / управления потоком, как и старые мейнфреймы Job Control Language … но на стероидах! Они являются полностью независимыми языками Turing , оптимизируя их для эффективного передачи данных и управления ими и от других исполняемых процессов, написанных на любом языке, поддерживаемом O / S.

    Большинство приложений Linux, независимо от того, на каком языке написана основная часть программы, зависят от сценариев оболочки, и Bash стал наиболее распространенным. Нажатие на значок на рабочем столе обычно запускает короткий скрипт Bash . Этот скрипт, прямо или косвенно, знает, где находятся все необходимые файлы, и устанавливает переменные и параметры командной строки, наконец, вызывая программу. Это простое использование оболочки.

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

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

    В производительности нет разницы между языком между Python и Bash . Это полностью зависит от того, как каждый кодируется и какие внешние инструменты называются.

    Любой из известных инструментов, таких как awk, sed, grep, bc, dc, tr и т. Д., Оставит эти операции на любом языке в пыли. Затем Bash предпочтительнее всего для чего-либо без графического интерфейса пользователя, поскольку проще и эффективнее вызывать и передавать данные обратно из инструмента, такого как Bash, чем Python .

    Представление

    Это зависит от того, какие программы вызывает сценарий оболочки Bash и их пригодность для подзадачи, которую они задают, будет ли общая пропускная способность и / или отзывчивость лучше или хуже, чем эквивалентный Python . Чтобы усложнить ситуацию, Python , как и большинство языков, также может вызывать другие исполняемые файлы, хотя он более громоздкий и, следовательно, не так часто используется.

    Пользовательский интерфейс

    Одной из областей, где Python является явным победителем, является пользовательский интерфейс. Это делает его отличным языком для создания локальных или клиент-серверных приложений, поскольку он изначально поддерживает графику GTK и гораздо более интуитивно понятен, чем Bash .

    Бэш понимает только текст. Другие инструменты должны быть вызваны для GUI и данных, переданных от них. Один сценарий Python . Более быстрые, но менее гибкие варианты – это двоичные файлы, такие как YAD, Zenity и GTKDialog .

    В то время как оболочки, подобные Bash, хорошо работают с графическими интерфейсами, такими как Yad , GtkDialog (встроенный XML-подобный интерфейс для функций GTK +) , диалог и xmessage , Python обычно проще и более способен.

    Резюме

    Построение с помощью сценариев оболочки похоже на сборку компьютера с готовыми компонентами, как настольные ПК.

    Построение с помощью Python , C ++ или большинства других языков больше похоже на создание компьютера путем пайки чипов (библиотек) и других электронных компонентов вместе с смартфонами.

    Как правило, bash работает лучше, чем python только в тех средах, где python недоступен. 🙂

    Серьезно, мне приходится иметь дело с обоими языками ежедневно, и я буду принимать python мгновенно через bash, если вам будет предоставлен выбор. Увы, я вынужден использовать bash на некоторых «маленьких» платформах, потому что кто-то (ошибочно, IMHO) решил, что python «слишком велик», чтобы соответствовать.

    Хотя верно, что bash может быть быстрее, чем python для некоторых выбранных задач, он никогда не может быть таким быстрым, чтобы развиваться с ним или как легко поддерживать (по крайней мере, после того, как вы получите 10 строк кода или около того). Единственная сильная точка Bash для python или ruby ​​или lua и т. Д. – это ее вездесущность.

    Эффективность разработчика гораздо важнее для меня в сценариях, где и bash, и Python – разумный выбор.

    Некоторые задачи хорошо подходят для bash, а другие – для Python. Для меня также не является чем-то начинать что-то как скрипт bash и менять его на Python, поскольку он развивается в течение нескольких недель.

    Большим преимуществом Python является то, что он обрабатывает файлы в углах, в то время как у него есть glob , shutil , subprocess и другие для обычных сценариев.

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

    Что быстрее? Ни то, что вы не сравниваете яблоки с яблоками здесь. Если вам пришлось сортировать текстовый файл ascii, и вы использовали такие инструменты, как zcat, sort, uniq и sed, вы будете курить Python.

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

    Производительность bash превосходит python во время запуска процесса.

    Вот некоторые измерения с моего основного ноутбука i7 под управлением Linux Mint:

     Starting process Startup time empty /bin/sh script 1.7 ms empty /bin/bash script 2.8 ms empty python script 11.1 ms python script with a few libs* 110 ms 

    * Загружаемые библиотеки Python: os, os.path, json, время, запросы, потоки, подпроцесс

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

    Если вы заботитесь о производительности, используйте bash только для:

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

    Если вы хотите сгладить вместе быструю утилиту с минимальными усилиями, bash – это хорошо. Для обертки вокруг приложения bash неоценим.

    Все, что может потребоваться, чтобы вы снова и снова добавляли улучшения, вероятно (хотя и не всегда), лучше подходит для языка, такого как Python, поскольку код Bash, содержащий более 1000 строк, очень болезнен для поддержания. Код Bash также раздражает отладку, когда он длится …….

    По моему опыту, часть проблем с такими вопросами связана с тем, что shell-скрипты обычно являются обычными задачами. Было очень мало задач сценария оболочки, с которыми я столкнулся, где уже доступно свободное решение.

    При написании скриптов производительность не имеет значения (в большинстве случаев).
    Если вы заботитесь о производительности «Python vs Bash», это ложный вопрос.

    Python :
    + легче писать
    + легче поддерживать
    + простое повторное использование кода (попробуйте найти универсальный защищенный от ошибок способ включения файлов с общим кодом в sh , смею вас)
    + вы тоже можете делать ООП!
    + простой анализ аргументов. ну, не проще, точно. он по-прежнему будет слишком многословным на мой вкус, но у python есть argparse .
    – уродливый уродливый «подпроцесс». попытайтесь цеплять команды и не плакать рекой, насколько уродливым станет ваш код. особенно если вы заботитесь о кодах выхода.

    Баш :
    + вездесущность, как было сказано ранее.
    + простая цепочка команд. вот как вы склеиваете разные команды простым способом. Также у Bash (не sh ) есть некоторые улучшения, такие как pipefail , поэтому цепочка действительно короткая и выразительная.
    + не требуют установки сторонних программ. могут быть выполнены сразу.
    – Боже, он полон ошибок. IFS, CDPATH .. тысячи из них.

    Если вы пишете скрипт больше 100 LOC: выберите Python
    Если нужно обработать путь в скрипте: выберите Python (3)
    Если нужно немного как alias но немного сложный: выберите Bash / sh

    В любом случае, нужно попытаться обеими сторонами понять, на что они способны.

    Возможно, ответ может быть расширен с помощью точек поддержки упаковки и IDE, но я не знаком с этими сторонами.

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

    Есть 2 сценария, где производительность Bash, по крайней мере, равна, я считаю:

    • Скрипты утилит командной строки
    • Скрипты, которые занимают всего лишь короткое время; где запуск интерпретатора Python занимает больше времени, чем сама операция

    Тем не менее, я обычно не очень забочусь о производительности самого скриптового языка. Если производительность является реальной проблемой, вы не выполняете скрипт, а программируете (возможно, на Python).

    Я не знаю, насколько это точно, но я обнаружил, что python / ruby ​​работает намного лучше для скриптов, которые имеют множество математических вычислений. В противном случае вы должны использовать dc или какой-либо другой «калькулятор произвольной точности». Это просто становится большой болью. С python у вас гораздо больше контроля над float vs ints, и намного проще выполнять множество вычислений и иногда.

    В частности, я бы никогда не работал с скриптом bash для обработки двоичной информации или байтов. Вместо этого я бы использовал что-то вроде python (возможно) или C ++ или даже Node.JS.

    Python - лучший язык программирования в мире.