[python] Python vs Bash-어떤 종류의 작업에서 각각 성능면에서 다른 작업을 능가합니까?

분명히 Python은 더 사용자 친화적이며 Google에서 빠른 검색은 Python이 바이트 컴파일되기 때문에 일반적으로 더 빠르다는 많은 결과를 보여줍니다. 사전 기반 작업에서 2000 % 이상의 개선을 볼 수 있다고 주장하는 사실 도 발견 했습니다 .

이 문제에 대한 귀하의 경험은 무엇입니까? 어떤 종류의 작업에서 각자가 확실한 승자입니까?



답변

일반적인 메인 프레임 흐름 …

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의 접착제입니다.

sh / ksh / bash / … 와 같은 Linux 쉘 은 이전 메인 프레임 작업 제어 언어와 매우 유사한 입력 / 출력 / 흐름 제어 지정 기능을 제공합니다. O / S가 지원하는 모든 언어로 작성된 다른 실행 프로세스와 데이터 및 제어를 효율적으로 전달하도록 최적화 된 상태에서 자체적 으로 Turing 완전한 언어 입니다.

대부분의 Linux 응용 프로그램은 대부분의 프로그램이 작성된 언어에 관계없이 쉘 스크립트에 의존하며 Bash 가 가장 일반적입니다. 데스크탑에서 아이콘을 클릭하면 일반적으로 짧은 Bash 스크립트 가 실행됩니다 . 이 스크립트는 직접 또는 간접적으로 필요한 모든 파일이 어디에 있는지 알고 변수와 명령 줄 매개 변수를 설정하여 마지막으로 프로그램을 호출합니다. 이것은 쉘의 가장 간단한 사용입니다.

그러나 우리가 알고있는 Linux는 시스템을 시작하고, 이벤트에 응답하고, 실행 우선 순위를 제어하고, 프로그램을 컴파일, 구성 및 실행하는 수천 개의 쉘 스크립트가 없으면 Linux가 될 수 없습니다. 이들 중 다수는 상당히 크고 복잡합니다.

셸은 컴파일 타임이 아닌 런타임에 함께 연결되는 미리 빌드 된 구성 요소를 사용할 수있는 인프라를 제공합니다. 이러한 구성 요소는 단독으로 또는 재 컴파일없이 다른 조합으로 사용할 수있는 독립형 프로그램입니다. 이들을 호출하는 구문은 Bash 내장 명령 의 구문과 구별 할 수 없으며 실제로 시스템에 독립 실행 형 실행 파일이 있고 종종 추가 옵션이있는 수많은 내장 명령이 있습니다.

성능면에서 PythonBash 사이에는 언어 차원의 차이가 없습니다 . 그것은 전적으로 각각이 어떻게 코딩되고 어떤 외부 도구가 호출되는지에 달려 있습니다.

모든 같은 잘 알려진 도구 나오지 AWK, 그렙, BC 주, DC, TR, 등은 먼지 중 하나의 언어로 그 작업을하고 떠날 것이다. BashPython 보다 Bash 를 사용하는 도구와 같은 도구에서 데이터를 다시 호출하고 전달하는 것이 더 쉽고 효율적이기 때문에 그래픽 사용자 인터페이스가없는 모든 경우에 선호됩니다 .

공연

Bash 쉘 스크립트가 호출 하는 프로그램 과 전체 처리량 및 / 또는 응답 성이 동등한 Python 보다 좋거나 나쁠 지 여부에 따라 주어진 하위 작업에 대한 적합성에 따라 다릅니다 . 문제를 복잡하게 만들기 위해 Python 은 대부분의 언어와 마찬가지로 다른 실행 파일을 호출 할 수도 있지만 더 번거롭고 자주 사용되지는 않습니다.

사용자 인터페이스

Python 이 확실한 승자 인 한 영역 은 사용자 인터페이스입니다. 이는 기본적으로 GTK 그래픽을 지원하고 Bash 보다 훨씬 직관적이기 때문에 로컬 또는 클라이언트-서버 애플리케이션을 구축하는 데 탁월한 언어입니다 .

Bash 는 텍스트 만 이해합니다. GUI 및 데이터를 다시 전달하려면 다른 도구를 호출해야합니다. 파이썬 스크립트는 하나 개의 옵션입니다. 더 빠르지 만 덜 유연한 옵션은 YAD, Zenity 및 GTKDialog와 같은 바이너리 입니다.

반면 같은 껍질 배쉬 같은 GUI를 잘 작동 야드 , GtkDialog (임베디드 XML이 같은 GTK + 기능 인터페이스) , 대화 , 그리고 xmessage , 파이썬은 훨씬 더 할 수있는 등 더 복잡한 GUI 창입니다.

요약

쉘 스크립트를 사용하여 빌드하는 것은 데스크탑 PC와 같은 기성 구성 요소로 컴퓨터를 조립하는 것과 같습니다.

Python으로 빌드 , C ++ 또는 대부분의 다른 언어 것이 더 함께 스마트 폰이 길을 칩 (라이브러리) 및 기타 전자 부품을 납땜하여 컴퓨터를 구축하는 것과 같다.

최상의 결과는 일반적으로 각자가 가장 잘하는 일을 할 수있는 언어 조합을 사용하여 얻을 수 있습니다. 한 개발자는 이것을 ” 다국어 프로그래밍 ” 이라고 부릅니다 .


답변

일반적으로 bash는 python을 사용할 수없는 환경에서만 python보다 잘 작동합니다. 🙂

진지하게, 나는 매일 두 언어를 다뤄야하고, 선택이 주어진다면 즉시 bash를 통해 파이썬을 가져갈 것이다. 아아, 누군가가 (오해하게도 IMHO) 파이썬이 적합하기에 “너무 크다”고 결정했기 때문에 특정 “작은”플랫폼에서 bash를 사용해야합니다.

일부 선택 작업에 ​​대해 bash가 Python보다 빠를 수 있다는 것은 사실이지만, 개발이 빠르거나 유지 관리가 쉽지는 않습니다 (적어도 10 줄 정도의 코드가 지나면). Bash의 유일한 장점은 파이썬이나 루비, 루아 등의 편재성입니다.


답변

bash와 Python이 합리적인 선택 인 시나리오에서 개발자 효율성 은 나에게 훨씬 더 중요합니다.

일부 작업은 bash에 적합하고 다른 작업은 Python에 적합합니다. bash 스크립트로 무언가를 시작하고 몇 주에 걸쳐 진화함에 따라 Python으로 변경하는 것도 드문 일이 아닙니다.

Python의 큰 장점은 파일 이름 처리와 관련된 코너 케이스에 있으며 일반적인 스크립팅 요구 사항을위한 glob , shutil , subprocess 및 기타 기능이 있습니다.


답변

스크립트를 작성할 때 성능은 중요하지 않습니다 (대부분의 경우).
성능에 관심이 있다면 ‘Python vs Bash’는 잘못된 질문입니다.

Python :
+ 작성
하기 쉬움 + 유지
하기 쉬움 + 코드 재사용 용이 (일반 코드가있는 파일을 포함하는 보편적 인 오류 방지 방법을 찾으십시오. sh감히)
+ OOP도 가능합니다!
+ 더 쉬운 인수 구문 분석. 글쎄, 쉽지는 않습니다. 그것은 여전히 ​​내 취향에 너무 장황 할 것 argparse입니다. 그러나 파이썬에는 기능이 내장되어 있습니다
.-추악한 ‘하위 프로세스’. 명령을 연결하고 코드가 얼마나 추악 해 질지 강하게 울지 마십시오. 특히 종료 코드에 관심이 있다면.

Bash :
+ ubiquity, 앞서 말했듯이 실제로.
+ 간단한 명령 체인. 이것이 다양한 명령을 간단한 방법으로 결합하는 방법입니다. 또한 Bash(아님 sh)과 같은 일부 개선 사항이 pipefail있으므로 연결이 정말 짧고 표현력이 좋습니다.
+ 타사 프로그램을 설치할 필요가 없습니다. 바로 실행할 수 있습니다.
-맙소사. IFS, CDPATH .. 수천 개.

하나는 스크립트를보다 큰 100 LOC를 작성하는 경우 선택 파이썬을
하면 스크립트에서 하나의 필요 경로 조작 : 선택 파이썬 (3)
필요 다소처럼 하나의 경우 alias선택 :하지만 약간 복잡 배쉬를 / 쉬

어쨌든, 그들이 무엇을 할 수 있는지 아이디어를 얻기 위해 양쪽 모두를 시도해야합니다.

패키징 및 IDE 지원 지점으로 대답을 확장 할 수 있지만이 측면에 대해 잘 모릅니다.

항상 그렇듯이 똥 샌드위치와 거대한 주물 중에서 선택해야합니다. 그리고 몇 년 전만해도 Perl은 새로운 희망이었습니다. 지금있는 곳.


답변

성능면에서 bash는 프로세스 시작 시간에 python보다 성능이 뛰어납니다.

다음은 Linux Mint를 실행하는 핵심 i7 랩톱의 몇 가지 측정 값입니다.

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는 다음 용도로만 사용하십시오.

  • 정말 간단하고 자주 호출되는 스크립트
  • 주로 다른 프로세스를 호출하는 스크립트
  • 수동 관리 작업과 스크립팅 사이에 최소한의 마찰이 필요한 경우-몇 가지 명령을 빠르게 확인하여 file.sh에 배치합니다.

답변

Bash는 주로 배치 / 셸 스크립팅 언어로, 호환성 문제는 말할 것도없고 다양한 데이터 유형과 제어 구조에 대한 모든 종류의 단점을 훨씬 덜 지원합니다.

어느 것이 더 빠릅니까? 여기에서도 사과와 사과를 비교하지 않았기 때문입니다. ascii 텍스트 파일을 정렬해야하고 zcat, sort, uniq 및 sed와 같은 도구를 사용했다면 Python 성능을 현명하게 사용하게 될 것입니다.

그러나 부동 소수점 및 다양한 제어 흐름을 지원하는 적절한 프로그래밍 환경이 필요한 경우 Python이 승리합니다. Bash와 Python으로 재귀 알고리즘을 작성했다면 Python 버전이 몇 배 이상 승리 할 것입니다.


답변

최소한의 노력으로 빠른 유틸리티를 함께 사용하려는 경우 bash가 좋습니다. 응용 프로그램을 둘러싼 래퍼의 경우 bash는 매우 유용합니다.

개선 사항을 추가하기 위해 계속해서 돌아와야 할 수있는 모든 것은 아마도 (항상은 아니지만) 파이썬과 같은 언어에 더 적합 할 것입니다. 1000 줄이 넘는 Bash 코드는 유지 관리가 매우 고통스러워지기 때문입니다. Bash 코드도 길어지면 디버깅을 짜증나게합니다 …….

이러한 종류의 질문에 대한 문제의 일부는 내 경험상 쉘 스크립트가 일반적으로 모두 사용자 지정 작업이라는 것입니다. 이미 무료로 사용할 수있는 솔루션이있는 곳에서 접한 쉘 스크립팅 작업은 거의 없었습니다.