Python vs Bash - 성능 측면에서 각 작업이 다른 작업을 능가합니까?
Python이 더 사용자 친화적인 것은 분명합니다. Google에서 빠른 검색은 Python이 바이트 컴파일이기 때문에 일반적으로 더 빠르다는 많은 결과를 보여줍니다.사전 기반 작업에서 2,000% 이상의 향상을 볼 수 있다고 주장하는 이것도 발견했습니다.
이 문제에 대한 당신의 경험은 어떻습니까?어떤 종류의 과제에서 각각이 확실한 승자입니까?
일반적인 메인프레임 흐름...
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 |
: :
셸은 리눅스의 접착제입니다.
sh/ksh/bash/...와 같은 리눅스 셸은 기존 메인프레임 작업 제어 언어와 매우 유사한 입력/출력/흐름 제어 지정 기능을 제공합니다.하지만 스테로이드로!이들은 자체적으로 튜링 완료 언어이며, OS가 지원하는 모든 언어로 작성된 다른 실행 프로세스와 데이터 및 제어를 효율적으로 주고 받을 수 있도록 최적화되어 있습니다.
프로그램의 대부분이 어떤 언어로 작성되었는지에 관계없이 대부분의 Linux 응용 프로그램은 셸 스크립트에 의존하며 Bash가 가장 일반적이 되었습니다.바탕 화면에서 아이콘을 클릭하면 일반적으로 짧은 Bash 스크립트가 실행됩니다.이 스크립트는 직접 또는 간접적으로 필요한 모든 파일이 어디에 있는지 알고 변수와 명령줄 매개 변수를 설정하여 프로그램을 호출합니다.그것은 껍데기의 가장 간단한 용도입니다.
그러나 우리가 알고 있는 리눅스는 시스템을 시작하고, 이벤트에 응답하고, 실행 우선순위를 제어하고, 프로그램을 컴파일, 구성 및 실행하는 수천 개의 셸 스크립트 없이는 리눅스가 될 수 없습니다.이것들 중 많은 것들은 꽤 크고 복잡합니다.
셸은 컴파일 시간이 아닌 런타임에 함께 연결된 사전 구축된 구성 요소를 사용할 수 있는 인프라를 제공합니다.이러한 구성 요소는 자체적으로 독립적인 프로그램으로, 재컴파일 없이 단독으로 또는 다른 조합으로 사용할 수 있습니다.이러한 명령어를 호출하는 구문은 Bash 내장 명령어의 구문과 구별할 수 없으며, 실제로 시스템에 독립 실행형 실행 파일이 있는 수많은 내장 명령어가 있으며, 종종 추가 옵션이 있습니다.
Python과 Bash의 성능은 언어적으로 차이가 없습니다.이는 전적으로 각 도구가 코드화되는 방식과 호출되는 외부 도구에 따라 달라집니다.
awk, sed, grep, bc, dc, tr 등과 같은 잘 알려진 도구는 먼지 속에서 두 언어 중 하나로 이러한 작업을 수행합니다.Bash는 Python보다 Bash와 같은 툴에서 데이터를 호출하고 전달하는 것이 더 쉽고 효율적이기 때문에 그래픽 사용자 인터페이스가 없는 모든 것에 선호됩니다.
성능
Bash 셸 스크립트가 호출하는 프로그램과 하위 작업에 대한 적합성에 따라 전체 처리량 및/또는 응답성이 동등한 Python보다 더 나은지 아니면 더 나쁜지가 결정됩니다.문제를 복잡하게 만드는 것은 대부분의 언어와 마찬가지로 Python도 다른 실행 파일을 호출할 수 있지만 더 번거롭고 자주 사용되지는 않습니다.
사용자 인터페이스
Python이 확실한 승자인 분야 중 하나는 사용자 인터페이스입니다.따라서 기본적으로 GTK 그래픽을 지원하고 Bash보다 훨씬 직관적이기 때문에 로컬 또는 클라이언트-서버 애플리케이션을 구축하는 데 적합한 언어입니다.
Bash는 텍스트만 이해합니다.GUI 및 해당 툴에서 전달되는 데이터를 위해 다른 툴을 호출해야 합니다.Python 스크립트는 한 가지 옵션입니다.더 빠르지만 덜 유연한 옵션은 YAD, Zenity 및 GTKDialog와 같은 바이너리입니다.
Bash와 같은 셸은 Yad, GtkDialog(GTK+ 함수에 대한 XML과 같은 내장 인터페이스), dialog 및 xmessage와 같은 GUI에서 잘 작동하지만 Python은 훨씬 더 기능적이며 복잡한 GUI 창에 더 적합합니다.
요약
셸 스크립트로 빌드하는 것은 데스크톱 PC처럼 기성품 구성 요소로 컴퓨터를 조립하는 것과 같습니다.
Python, C++ 또는 대부분의 다른 언어로 빌드하는 것은 스마트폰처럼 칩(라이브러리)과 다른 전자 부품을 납땜하여 컴퓨터를 빌드하는 것과 비슷합니다.
최상의 결과는 보통 각자가 가장 잘 할 수 있는 언어의 조합을 사용하여 얻을 수 있습니다.한 개발자는 이것을 "다중 언어 프로그래밍"이라고 부릅니다.
일반적으로 bash는 python을 사용할 수 없는 환경에서만 python보다 더 잘 작동합니다.:)
진심으로, 저는 매일 두 언어를 다루어야 하며, 선택이 주어진다면 즉시 파이썬을 사용할 것입니다.아아, 누군가(실수로 IMHO)가 파이썬이 "너무 커서" 맞지 않는다고 결정했기 때문에 특정 "작은" 플랫폼에서 bash를 사용해야 합니다.
일부 선택 작업의 경우 bash가 python보다 빠를 수 있다는 것은 사실이지만, (적어도 10줄 정도의 코드를 통과한 후에) 절대로 개발이 빠르지 않거나 유지보수가 쉬울 수 없습니다.Bash의 유일한 강점은 wrt python 또는 ruby or lua 등, 유비쿼터스입니다.
bash와 Python 모두 합리적인 선택인 시나리오에서는 개발자 효율성이 훨씬 더 중요합니다.
일부 작업은 bash에 도움이 되고 다른 작업은 Python에 도움이 됩니다.또한 bash 스크립트로 시작하여 몇 주에 걸쳐 발전함에 따라 Python으로 변경하는 것도 드문 일이 아닙니다.
Python의 큰 장점은 파일 이름 처리와 관련된 코너 케이스에 있는 반면 일반적인 스크립팅 요구를 위한 glob, shutil, subprocess 등이 있습니다.
스크립트를 작성할 때 성능은 중요하지 않습니다(대부분의 경우).
성능에 관심이 있다면 '파이썬 vs 배시'는 잘못된 질문입니다.
파이썬:
쓰기 쉬운
유지 관리가 용이한
더 쉬운 코드 재사용(일반적인 코드를 가진 파일을 포함하는 보편적인 오류 방지 방법을 찾으십시오.sh
감히)
당신도 그것으로 OOP를 할 수 있습니다!
더 쉬운 주장 구문 분석. 음, 더 쉬운 것은 아닙니다. 정확하게.내 입맛에는 여전히 너무 말이 많을 것이다, 하지만 파이썬은.argparse
붙박이 설비
추악한 '하위 프로세스'.명령을 연결하고 코드가 얼마나 추해질지 강에서 울지 않도록 노력합니다.특히 출구 코드에 관심이 있다면 더욱 그렇습니다.
배쉬:
실제로, 앞에서 말한 것처럼 유비쿼터스.
단순 명령 체인입니다.그것이 간단한 방법으로 서로 다른 명령을 결합하는 방법입니다.또한.Bash
(아닙니다.sh
) 몇 가지 개선 사항이 있습니다.pipefail
그래서 체인은 정말 짧고 표현력이 풍부합니다.
타사 프로그램을 설치할 필요가 없습니다.바로 실행할 수 있습니다.
세상에, 고트카로 가득 차 있어 IFS, CDPATH..그들 수천 명.
100 LOC보다 큰 스크립트를 작성하는 경우: Python을 선택합니다.
스크립트에서 경로 조작이 필요한 경우: Python(3)을 선택합니다.
만약 누군가가 다소 필요로 한다면,alias
약간 복잡하지만: Bash/sh를 선택합니다.
어쨌든, 사람들은 그들이 무엇을 할 수 있는지 생각하기 위해 양쪽 모두를 시도해야 합니다.
패키지 및 IDE 지원 사항으로 답변을 확장할 수도 있지만, 저는 이 측면에 대해 잘 모릅니다.
언제나 그렇듯이 당신은 똥 샌드위치와 자이언트 두슈 중에서 선택해야 합니다.몇 년 전까지만 해도 펄은 새로운 희망이었습니다.지금 있는 곳.
성능별 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
*파이썬으로 로드된 libs는 다음과 같습니다: os, os.path, json, 시간, 요청, 스레드화, 하위 프로세스
이는 큰 차이를 보여주지만 일반적으로 외부 프로세스를 호출해야 하기 때문에 합리적인 작업을 수행해야 하는 경우 배시 실행 시간이 빠르게 감소합니다.
성능에 관심이 있는 경우 bash는 다음에만 사용합니다.
- 매우 단순하고 자주 불리는 스크립트
- 주로 다른 프로세스를 호출하는 스크립트
- 수동 관리 작업과 스크립팅 간의 마찰을 최소화해야 할 경우 몇 가지 명령을 빠르게 확인하여 파일에 저장합니다.쉬
Bash는 기본적으로 배치/쉘 스크립트 언어로, 호환성 문제는 말할 것도 없고 제어 구조와 관련된 다양한 데이터 유형과 모든 종류의 특이점에 대한 지원이 훨씬 적습니다.
어느 것이 더 빠릅니까?둘 다 아닙니다. 왜냐하면 당신은 여기서 사과를 사과와 비교하지 않기 때문입니다.아스키 텍스트 파일을 정렬해야 하고 zcat, sort, uniq 및 sed와 같은 도구를 사용하고 있다면 Python 성능을 현명하게 연기할 수 있습니다.
하지만 부동소수점과 다양한 제어 흐름을 지원하는 적절한 프로그래밍 환경이 필요하다면 파이썬이 승리합니다.만약 당신이 Bash와 Python에서 재귀 알고리즘을 쓴다면, Python 버전은 크기 이상의 순서로 이길 것입니다.
주로 구글이 이 질문을 좋아하기 때문에 이 늦은 답변을 올립니다.
문제와 맥락은 도구가 아니라 워크플로우에 관한 것이어야 한다고 생각합니다.전반적인 철학은 항상 "업무에 적합한 도구 사용"입니다.그러나 이에 앞서 많은 사람들이 도구에 길을 잃었을 때 종종 잊어버리는 것이 있습니다. "작업을 완료하십시오."
완전히 정의되지 않은 문제가 있을 때는 거의 항상 Bash로 시작합니다.저는 읽기 쉽고 유지 관리가 가능한 대규모 Bash 스크립트에서 비정상적인 문제를 해결했습니다.
하지만 언제부터 문제가 Bash에게 요청해야 하는 것을 초과하기 시작합니까?경고를 표시하는 데 사용하는 몇 가지 체크가 있습니다.
- Bash에 2D(또는 그 이상) 어레이가 필요합니까?만약 그렇다면, Bash가 훌륭한 데이터 처리 언어가 아니라는 것을 깨달아야 할 때입니다.
- 다른 유틸리티에 대한 데이터를 준비하는 작업이 실제로 해당 유틸리티를 실행하는 작업보다 더 많은가요?만약 그렇다면, Bash가 훌륭한 데이터 처리 언어가 아니라는 것을 다시 한번 깨달아야 합니다.
- 스크립트가 너무 커서 관리할 수 없는 것입니까?만약 그렇다면, Bash는 스크립트 라이브러리를 가져올 수 있지만 다른 언어처럼 패키지 시스템이 부족하다는 것을 인식하는 것이 중요합니다.그것은 대부분의 다른 언어들과 비교했을 때 정말로 "당신만의" 언어입니다.한편, 엄청난 양의 기능이 내장되어 있습니다(일부는 너무 많다고 합니다...).
목록은 계속됩니다.결론적으로 스크립트를 계속 실행하기 위해 기능을 추가할 때는 Bash를 떠날 때입니다.
Python으로 작업을 이동하기로 결정했다고 가정합니다.Bash 스크립트가 깨끗할 경우 초기 변환은 매우 간단합니다.심지어 첫 번째 패스를 해줄 몇 개의 변환기/번역기도 있습니다.
다음 질문은 다음과 같습니다.Python으로 전환하는 것을 포기하는 것은 무엇입니까?
외부 유틸리티에 대한 모든 호출은 에서 전송되는 것으로 포장되어야 합니다.
subprocess
모듈(또는 동등한 모듈).이를 위한 여러 가지 방법이 있으며, 3.7 이전까지는 이를 올바르게 수행하는 데 약간의 노력이 필요했습니다(3.7 개선).subprocess.run()
모든 일반적인 사례를 자체적으로 처리).놀랍게도 Python에는 키보드(stdin)를 폴링하기 위한 표준 플랫폼 독립적인 비차단 유틸리티(타임아웃 있음)가 없습니다.더 배시
read
명령은 간단한 사용자 상호 작용을 위한 훌륭한 도구입니다.가장 일반적으로 사용하는 방법은 사용자가 키를 누를 때까지 스피너를 보여주는 동시에 (스피너 단계별로) 폴링 기능을 실행하여 상태가 양호한지 확인하는 것입니다.이것은 처음에 생각했던 것보다 더 어려운 문제입니다. 그래서 저는 종종 Bash에게 전화를 합니다: 비싸지만, 정확히 제가 필요로 하는 것을 해줍니다.내장형 또는 메모리 제한 시스템에서 개발 중인 경우 Python의 메모리 설치 공간이 Bash의 메모리 설치 공간보다 몇 배 더 클 수 있습니다(현재 작업에 따라 다름).또한 메모리에 Bash 인스턴스가 이미 있는 경우가 대부분이지만 Python의 경우는 그렇지 않을 수 있습니다.
한 번 실행되고 빠르게 종료되는 스크립트의 경우 Python의 시작 시간이 Bash의 시작 시간보다 훨씬 더 길어질 수 있습니다.그러나 스크립트에 중요한 계산이 포함되어 있으면 Python은 빠르게 앞으로 나아갑니다.
Python은 세계에서 가장 포괄적인 패키지 시스템을 보유하고 있습니다.Bash가 조금이라도 복잡해지면 Python은 Bash의 전체 청크를 단일 호출로 만드는 패키지를 가지고 있을 것입니다.그러나 사용할 적절한 패키지를 찾는 것은 Pythonista가 되는 데 있어 가장 크고 힘든 부분입니다.다행히 구글과 스택익스체인지는 당신의 친구입니다.
최소한의 노력으로 빠른 유틸리티를 결합하려는 경우 bash가 좋습니다.애플리케이션을 둘러싼 래퍼에게는 bash가 매우 유용합니다.
1000개 이상의 줄로 구성된 Bash 코드를 유지하기가 매우 힘들기 때문에 개선 사항을 추가하기 위해 반복해서 방문하게 하는 모든 것이 Python과 같은 언어에 (항상은 아니지만) 더 적합할 것입니다.Bash 코드도 길어지면 디버깅하기가 귀찮습니다.
제 경험으로 볼 때, 이러한 종류의 질문에 대한 문제의 일부는 셸 스크립트가 일반적으로 모두 사용자 지정 작업이라는 것입니다.이미 무료로 사용할 수 있는 솔루션이 있는 셸 스크립팅 작업은 거의 없었습니다.
Bash 성능이 적어도 동일한 시나리오는 두 가지가 있습니다.
- 명령줄 유틸리티 스크립팅
- Python 인터프리터를 시작하는 데 작업 자체보다 시간이 더 많이 걸리는 짧은 실행 시간 스크립트
그렇긴 하지만, 저는 보통 스크립트 언어 자체의 성능에 대해 별로 신경 쓰지 않습니다.성능이 실제 문제인 경우 스크립트를 작성하지 않고 프로그래밍합니다(Python에서 가능).
이것이 정확한지는 모르겠지만, 수학적 계산이 많은 스크립트에서 파이썬/루비가 훨씬 더 잘 작동한다는 것을 알게 되었습니다.그렇지 않으면 사용해야 합니다.dc
또는 다른 "표준 정밀도 계산기".그것은 아주 큰 고통이 될 뿐입니다.python을 사용하면 부동소수점 대 int에 대한 제어력이 훨씬 향상되고 많은 계산을 수행하는 것이 훨씬 쉬워집니다.
특히 바이너리 정보나 바이트를 처리하기 위해 bash 스크립트를 사용하지 않을 것입니다.대신에 저는 파이썬(아마도)이나 C++, 심지어 노드 같은 것을 사용할 것입니다.제이에스
성능 면에서 둘 다 동일한 작업을 수행할 수 있습니다. 그렇다면 문제는 어느 것이 더 많은 개발 시간을 절약하느냐 하는 것입니다.
Bash는 다른 명령을 호출하여 새 명령을 생성하는 데 사용됩니다.이는 사용자가 어떤 프로그래밍 언어를 사용했는지에 관계없이 다른 사람에게서 빌린 코드만으로 새 프로그램을 빠르게 만들 수 있다는 장점이 있습니다.
하위 명령 간의 인터페이스가 일반 텍스트에 불과하기 때문에 하위 명령의 변경에 저항하는 부작용도 있습니다.
게다가 Bash는 당신이 그것에 글을 쓸 수 있는 방법에 대해 매우 관대합니다.이것은 더 다양한 맥락에서 잘 작동할 것이라는 것을 의미하지만, 또한 프로그래머가 깨끗하고 안전한 방식으로 코딩할 의도가 있는지에 의존합니다.그렇지 않으면 Bash는 당신이 난장판을 만드는 것을 막지 못할 것입니다.
파이썬은 스타일에 따라 더 구조화되어 있기 때문에 지저분한 프로그래머는 그렇게 지저분하지 않을 것입니다.또한 Linux 외부의 운영 체제에서도 작동하므로 이러한 휴대성이 필요한 경우 즉시 더 적합합니다.
그러나 다른 명령을 호출하는 것은 그리 간단하지 않습니다.따라서 운영 체제가 유닉스인 경우 Bash에서 개발하는 것이 가장 빠른 개발 방법임을 알게 될 것입니다.
Bash를 사용해야 하는 경우:
- 이것은 그래픽이 아닌 프로그램, 또는 그래픽의 엔진입니다.
- UNIX 전용입니다.
Python을 사용해야 하는 경우:
- 그래픽 프로그램입니다.
- Windows에서 작동합니다.
언급URL : https://stackoverflow.com/questions/2424921/python-vs-bash-in-which-kind-of-tasks-each-one-outruns-the-other-performance-w
'itsource' 카테고리의 다른 글
Reflection을 사용하여 개인 필드를 찾으시겠습니까? (0) | 2023.05.22 |
---|---|
특정 유형(버튼/텍스트 상자)의 Windows Forms 양식에 대한 모든 하위 컨트롤을 가져오는 방법은 무엇입니까? (0) | 2023.05.22 |
WPF 데이터 그리드에서 스크롤 막대를 활성화하려면 어떻게 해야 합니까? (0) | 2023.05.17 |
'_eq__'을(를) 정의하는 유형은 해시할 수 없습니까? (0) | 2023.05.17 |
jQuery를 사용하여 드롭다운 목록에 옵션을 추가하려면 어떻게 해야 합니까? (0) | 2023.05.17 |