पाइथन बनाम बैश - किस तरह के कार्यों में हर एक दूसरे के प्रदर्शन को समझदार बनाता है?


97

जाहिर है कि पायथन अधिक उपयोगकर्ता के अनुकूल है, Google पर एक त्वरित खोज कई परिणाम दिखाती है जो कहते हैं कि, जैसा कि पायथन बाइट-संकलित है आमतौर पर तेज होता है। मैं भी पाया इस दावे आप शब्दकोश आधारित संचालन पर% 2000 से अधिक का सुधार देख सकते हैं।

इस मामले पर आपका क्या अनुभव है? किस तरह के कार्य में हर एक एक स्पष्ट विजेता है?


6
यह वास्तव में एक सर्वेक्षण नहीं है, कोई पूर्वनिर्धारित विकल्प नहीं हैं, मुझे कुछ जानकारी की आवश्यकता है कि कौन सा उपकरण किस तरह का काम सबसे अच्छा करता है।
डॉपेलगैंगर

जवाबों:


94

विशिष्ट मेनफ्रेम प्रवाह ...

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

विशिष्ट लिनक्स प्रवाह ...

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 / ... जैसे लिनक्स के गोले पुराने मेनफ्रेम जॉब कंट्रोल लैंग्वेज की तरह इनपुट / आउटपुट / फ्लो-कंट्रोल पदनाम की सुविधा प्रदान करते हैं ... लेकिन स्टेरॉयड पर! वे किसी भी भाषा में ओ / एस समर्थन में लिखी जाने वाली अन्य निष्पादन प्रक्रियाओं से डेटा और नियंत्रण को कुशलतापूर्वक पारित करने के लिए अनुकूलित किए जाने के दौरान पूरी भाषा में अपने आप में ट्यूरिंग कर रहे हैं ।

अधिकांश लिनक्स अनुप्रयोग, इस बात पर ध्यान दिए बिना कि किस भाषा में कार्यक्रम का थोक लिखा गया है, शेल स्क्रिप्ट पर निर्भर करता है और बैश सबसे आम हो गया है। डेस्कटॉप पर एक आइकन पर क्लिक करने से आमतौर पर एक छोटी बैश स्क्रिप्ट चलती है । वह स्क्रिप्ट, जो प्रत्यक्ष या अप्रत्यक्ष रूप से जानता है, जहां सभी आवश्यक फाइलें हैं और चर और कमांड लाइन पैरामीटर सेट करते हैं, अंत में प्रोग्राम को कॉल करते हैं। यह एक शेल का सबसे सरल उपयोग है।

लिनक्स जैसा कि हम जानते हैं कि सिस्टम के स्टार्टअप, घटनाओं की प्रतिक्रिया, नियंत्रण की प्राथमिकताओं और संकलन, कॉन्फ़िगर और चलाने के लिए हजारों शेल स्क्रिप्ट के बिना यह शायद ही लिनक्स होगा। इनमें से कई काफी बड़े और जटिल हैं।

गोले एक बुनियादी ढांचा प्रदान करते हैं जो हमें पूर्व-निर्मित घटकों का उपयोग करने देता है जो संकलन समय के बजाय रन टाइम पर एक साथ जुड़े हुए हैं। वे घटक अपने आप में स्वतंत्र-स्थायी कार्यक्रम हैं जिनका उपयोग अकेले या अन्य संयोजनों में बिना रीकॉम्प्लिनिंग के किया जा सकता है। उन्हें कॉल करने के लिए वाक्यविन्यास बैश बिलिन कमांड से अप्रभेद्य है , और वास्तव में कई अंतर्निहित कमांड हैं जिनके लिए सिस्टम पर एक स्टैंड-अलोन निष्पादन योग्य है, जिसमें अक्सर अतिरिक्त विकल्प होते हैं।

प्रदर्शन में पायथन और बैश के बीच कोई भाषा-व्यापी अंतर नहीं है । यह पूरी तरह से इस बात पर निर्भर करता है कि प्रत्येक को कैसे कोडित किया जाता है और कौन से बाहरी उपकरण कहलाते हैं।

कोई भी प्रसिद्ध उपकरण जैसे कि awk, sed, grep, bc, dc, tr, इत्यादि उन कार्यों को धूल में या तो भाषा में करना छोड़ देंगे। बैश को तब ग्राफिकल यूजर इंटरफेस के बिना कुछ भी पसंद किया जाता है क्योंकि पायथन की तुलना में बैश जैसे टूल से डेटा को कॉल और पास करना आसान और अधिक कुशल होता है

प्रदर्शन

यह इस बात पर निर्भर करता है कि बैश शेल स्क्रिप्ट कॉल कौन से प्रोग्राम्स और सबटैक के लिए उनकी उपयुक्तता है जो उन्हें दिया जाता है कि क्या कुल थ्रूपुट और / या जवाबदेही समकक्ष पायथन से बेहतर या बदतर होंगे । अधिकांश भाषाओं की तरह, पायथन को जटिल बनाने के लिए , अन्य निष्पादनयोग्य भी कह सकते हैं, हालांकि यह अधिक बोझिल है और इस प्रकार अक्सर उपयोग नहीं किया जाता है।

प्रयोक्ता इंटरफ़ेस

एक क्षेत्र जहां पायथन स्पष्ट विजेता है यूजर इंटरफेस है। यह स्थानीय या क्लाइंट-सर्वर अनुप्रयोगों के निर्माण के लिए एक उत्कृष्ट भाषा बनाता है क्योंकि यह मूल रूप से GTK ग्राफिक्स का समर्थन करता है और बैश की तुलना में कहीं अधिक सहज है ।

बैश केवल पाठ को समझता है। अन्य उपकरणों को GUI के लिए बुलाया जाना चाहिए और डेटा उनसे वापस पारित हो जाएगा। एक पायथन स्क्रिप्ट एक विकल्प है। तेज़ लेकिन कम लचीले विकल्प YAD, Zenity और GTKDialog जैसे बायनेरी हैं

जबकि तरह के गोले बैश की तरह GUIs के साथ अच्छी तरह से काम Yad , GtkDialog (एम्बेडेड एक्सएमएल की तरह जीटीके + कार्यों के लिए इंटरफेस) , संवाद , और xmessage , पायथन अधिक सक्षम और इतने जटिल जीयूआई खिड़कियों के लिए बेहतर है।

सारांश

शेल स्क्रिप्ट के साथ निर्माण करना कंप्यूटर को ऑफ-द-शेल्फ घटकों के साथ असेंबल करने जैसा है जैसे डेस्कटॉप पीसी।

साथ बिल्डिंग अजगर , सी ++ या सबसे किसी भी अन्य भाषा अधिक चिप्स (पुस्तकालयों) और अन्य इलेक्ट्रॉनिक भागों को एक साथ जिस तरह से स्मार्टफोन हैं टांका लगाने से एक कंप्यूटर के निर्माण की तरह है।

सर्वोत्तम परिणाम आमतौर पर भाषाओं के संयोजन का उपयोग करके प्राप्त किए जाते हैं जहां प्रत्येक वह कर सकता है जो वे सबसे अच्छा करते हैं। एक डेवलपर इसे " पॉलीग्लॉट प्रोग्रामिंग " कहता है ।


16
मैं यह पहचानने में विफल रहा हूं कि इसे कैसे स्वीकार किया जा सकता है। यह कोई अंतर्दृष्टि प्रदान नहीं करता है कि कौन से कार्य उन दोनों के लिए अधिक अनुकूल हैं।
सतर्क

2
@ विजिलेंसर मुझे उम्मीद है कि अभी पोस्ट किए गए संशोधन और परिवर्धन मददगार हैं।
DocSalvager

1
हालांकि मैं अन्य टिप्पणियों से सहमत हूं, लेकिन यह सवाल का जवाब नहीं देता है। यह मेरे द्वारा पढ़े गए सर्वश्रेष्ठ उत्तरों में से एक है!
जिम मिचनर

72

आमतौर पर, बैश केवल उन वातावरण में अजगर से बेहतर काम करता है, जहां अजगर उपलब्ध नहीं है। :)

गंभीरता से, मुझे दोनों भाषाओं के साथ दैनिक व्यवहार करना होगा, और पसंद आने पर तुरंत बैश पर अजगर ले जाएगा। काश, मुझे कुछ "छोटे" प्लेटफार्मों पर बैश का उपयोग करने के लिए मजबूर किया जाता है क्योंकि किसी के पास (गलती से, आईएमएचओ) ने फैसला किया कि फिट होने के लिए अजगर "बहुत बड़ा" है।

हालांकि यह सच है कि कुछ चुनिंदा कार्यों के लिए बैश अजगर से ज्यादा तेज हो सकता है, यह कभी भी विकसित होने के लिए उतनी जल्दी नहीं हो सकता है, या बनाए रखने के लिए आसान (कम से कम आपके द्वारा कोड की पिछली 10 पंक्तियां पाने के बाद)। बैश का एकमात्र मजबूत बिंदु wrt अजगर या माणिक या लुआ, आदि इसकी सर्वव्यापकता है।


4
क्या पहले से ही हर लिनक्स / यूनिक्स, यहां तक ​​कि मैकओएस पर पायथन नहीं है? मैं उत्सुक हूं कि क्या अभियान तेजी से खत्म हो रहा है - जो मैंने समझा, उससे अलग-अलग अलग कमांड को कॉल करना पायथन osया shutilमॉड्यूल कमांड की तुलना में बहुत धीमा है ।
NoBugs

1
@NoBugs यह निश्चित रूप से हर एक लिनक्स / यूनिक्स वितरण पर नहीं होगा। यह लगभग निश्चित रूप से हर प्रमुख लिनक्स वितरण (उदाहरण के लिए डेबियन-आधारित वितरण, स्लैकवेयर, आदि) और मैक ओएस एक्स पर आता है, हालांकि, यदि आप yocto ( yoctoproject.org ) के साथ अपना स्वयं का आईएसओ बनाते हैं , तो आपके पास यह नहीं हो सकता है, जैसा कि आप हर पैकेज अपने आप को अनुकूलित करते हैं। लेकिन शायद यह कहना सुरक्षित है कि अब किसी भी प्रमुख यूनिक्स ओएस के लिए, यह python2 (कम से कम) और शायद python3 के साथ भी स्थापित होगा।
dylnmc

पायथन जटिल कार्यों के लिए एक उत्कृष्ट स्क्रिप्टिंग भाषा है जैसे कि पूर्ण-विशेषताओं वाले जीयूआई। समान रूप से महत्वपूर्ण, यह अच्छी प्रोग्रामिंग प्रथाओं को लागू करता है ताकि कार्यक्रमों को बनाए रखना आसान हो। बैश को बनाए रखने के लिए अन्यत्र सीखी गई अच्छी प्रथाओं को लागू करने की आवश्यकता होती है। ऐसा करने में, और UI के लिए GUI संवाद उपयोगिता या पायथन का उपयोग करके, बेहतर प्रदर्शन (बाश से बुलाए गए अत्यंत तेज़ उपयोगिता कार्यक्रमों के माध्यम से) के साथ-साथ एक अच्छा यूएक्स भी देता है।
डॉकस्लेवगर

34

डेवलपर की दक्षता मेरे लिए उन परिदृश्यों में बहुत अधिक मायने रखती है जहां बैश और पायथन दोनों समझदार विकल्प हैं।

कुछ कार्य खुद को अच्छी तरह से कोसने के लिए उधार देते हैं, और दूसरों को पायथन को। मेरे लिए यह भी असामान्य नहीं है कि मैं किसी बैश स्क्रिप्ट के रूप में कुछ शुरू करूं और इसे कई हफ्तों में विकसित करते हुए इसे पायथन में बदल दूं।

जबकि यह है एक बड़ा लाभ अजगर है, फ़ाइल नाम से निपटने के आसपास कोने मामलों में ग्लोब , shutil , उपप्रक्रिया , और दूसरों को आम पटकथा की जरूरत के लिए।


5
सवाल "प्रदर्शन-वार" तुलना के उद्देश्य से है जो मशीन के प्रदर्शन को दर्शाता है और डेवलपर के प्रदर्शन को नहीं। एक अन्य उत्तर में मेरे प्रदर्शन परीक्षण देखें।
ग्रेज़गोरज़ लुसीस्वो

25

जब आप पटकथा लेखन लिखते हैं तो कोई फर्क नहीं पड़ता (ज्यादातर मामलों में)।
यदि आप 'पायथन बनाम बैश' के प्रदर्शन की परवाह करते हैं तो यह एक गलत सवाल है।

पायथन :
+ आसान लिखने के
लिए
+ आसान कोड बनाए रखने के लिए आसान + पुन: उपयोग (सार्वभौमिक त्रुटि प्रूफ खोजने के लिए प्रयास करें जिसमें आम कोड के साथ फाइलें शामिल हैं sh, मैं आपको हिम्मत देता हूं)
+ आप इसके साथ OOP भी कर सकते हैं!
+ आसान तर्क पार्सिंग। ठीक है, आसान नहीं, बिल्कुल। यह अभी भी मेरे स्वाद के लिए बहुत ही चिंताजनक होगा, लेकिन अजगर के पास argparseनिर्मित सुविधा है
- बदसूरत बदसूरत 'सबप्रोसेस'। चेन कमांड की कोशिश करें और एक नदी को रोने के लिए न करें कि आपका कोड कितना बदसूरत हो जाएगा। खासकर यदि आप बाहर निकलने के कोड की परवाह करते हैं।

बैश :
+ सर्वव्यापक, जैसा कि पहले कहा गया था, वास्तव में।
+ सरल आज्ञाओं का पीछा। यही कारण है कि आप एक सरल तरीके से विभिन्न कमांडों को एक साथ गोंद करते हैं। इसके अलावा Bash(नहीं sh) कुछ सुधार हैं, जैसे pipefail, इसलिए चेनिंग वास्तव में कम और अभिव्यंजक है।
+ 3-पार्टी कार्यक्रमों को स्थापित करने की आवश्यकता नहीं है। तुरंत निष्पादित किया जा सकता है।
- भगवान, यह gotchas से भरा है। IFS, CDPATH .. उनमें से हजारों।

यदि कोई लिपि 100 LOC से बड़ी लिखता है: पाइथन चुनें
यदि लिपि में पथ हेरफेर की आवश्यकता है: पाइथन चुनें (3)
यदि किसी को कुछ हद तक पसंद है aliasलेकिन थोड़ा जटिल है: बैश / श का चयन करें

वैसे भी, दोनों को यह विचार करने की कोशिश करनी चाहिए कि वे क्या करने में सक्षम हैं।

हो सकता है कि उत्तर को पैकेजिंग और आईडीई समर्थन बिंदुओं के साथ बढ़ाया जा सकता है, लेकिन मैं इस पक्ष से परिचित नहीं हूं।

हमेशा की तरह आपको turd सैंडविच और विशाल डौच में से चुनना होगा। और याद रखना, अभी कुछ साल पहले पर्ल नई उम्मीद थी। अब कहां है।


4
हां, बैश वाला एक कोड हमेशा के लिए रहता है। मैंने बहुत से पर्ल कोड किए, वे अब बेकार हैं।
रेमंड gsh

सिर्फ परिप्रेक्ष्य के लिए ... वर्तमान में जो सबसे बड़ी स्क्रिप्ट मैंने लिखी है, जिसे मैं हर दिन उपयोग करता हूं, का वजन वास्तविक, गैर-टिप्पणी या ब्लैंक लाइन बैश कोड की 4121 लाइनों पर होता है। व्यापक टिप्पणियों और इस तरह के साथ, यह 7261 लाइनों बनाता है। यह प्रत्येक फंक्शन के लिए मैनपेज-जैसे डॉक्स की मदद फ़ाइल के साथ है जो कि अन्य 6650 लाइनें हैं। प्रत्येक फ़ंक्शन में एक विकल्प होता है जो तुरंत अपने उपलब्ध पाठ को सर्वोत्तम उपलब्ध आउटपुट रूप में प्राप्त कर सकता है और प्रदर्शित कर सकता है जिसमें वर्तमान में YAD, Zenity, संवाद या सिर्फ सादे CLI पाठ के 3 संस्करण शामिल हैं। मैं इसे 'किट' कहता हूं। यह इस लेखन के रूप में संस्करण 44 पर है।
DocSalvager

यह भारी है! (c)
चौकसी

1
मुझे नहीं लगता कि एलओसी वास्तव में पायथन को चुनने का निर्णय कारक है। अधिक, आप कितना जटिल कार्य कर रहे हैं? यदि आप सिर्फ 100 आदेशों का पालन कर रहे हैं जो शायद ठीक है, अगर यह केवल 30 एलओसी है, लेकिन यह अजगर में समझने में आसान हो सकता है - अजगर का उपयोग करें।
19

@ ठीक है, जब यह कुछ भी नहीं छूता है। लेकिन कुछ स्थितियों को छोड़ दिया जाता है जहां चीजें गलत हो सकती हैं। आप इसे गैर-डिफ़ॉल्ट पर सेट करते हैं और इसे खाली करना भूल जाते हैं। बाहर कुछ बदल गया है, लेकिन आपकी स्क्रिप्ट डिफ़ॉल्ट पर निर्भर करती है, और इसी तरह। एक को हमेशा IFS को ध्यान में रखना पड़ता है, क्योंकि कुछ उपकरण स्पष्ट रूप से इसका उपयोग करते हैं।
vigilancer

22

प्रदर्शन-वार बैश आउटपरफॉर्मर्स प्रक्रिया स्टार्टअप समय में अजगर।

लिनक्स मिंट पर चलने वाले मेरे कोर आई 7 लैपटॉप से ​​कुछ माप इस प्रकार हैं:

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

* पायथन लोड किए गए कार्य हैं: ओएस, ओएसपीथ, जसन, समय, अनुरोध, थ्रेडिंग, सबप्रोसेस

यह एक बहुत बड़ा अंतर दिखाता है लेकिन बैश का निष्पादन समय जल्दी से कम हो जाता है अगर इसे कुछ भी समझदार करना पड़ता है क्योंकि इसे आमतौर पर बाहरी प्रक्रियाओं को कॉल करना होगा।

यदि आप केवल प्रदर्शन बैश के बारे में परवाह करते हैं:

  • वास्तव में सरल और अक्सर स्क्रिप्ट कहा जाता है
  • स्क्रिप्ट जो मुख्य रूप से अन्य प्रक्रियाओं को कहते हैं
  • जब आपको मैन्युअल प्रशासनिक कार्यों और स्क्रिप्टिंग के बीच न्यूनतम घर्षण की आवश्यकता होती है - तेजी से कुछ आदेशों की जांच करें और उन्हें file.sh में रखें

... और /bin/echoइस तरह के परिमाण द्वारा outperforms को मारना, इसे मापना मुश्किल है। इसलिए बैश चलाने के बजाय, आप /bin/echo mycommand > named_pipe(नामांकित पाइप या सॉकेट को आउटपुट कमांड / संदेश) का उपयोग कर सकते हैं ... और उस पाइप से कमांड / निर्देश पढ़ने की पृष्ठभूमि की प्रक्रिया है और उन्हें चला रहे हैं। तो बैश वास्तव में एक अच्छा "स्टार्टअप लागत अनुकूलन" नहीं है।
Cezary Baginski

आमतौर पर आप प्रक्रियाओं के बजाय थ्रेड्स का उपयोग करने वाले होते हैं जब कार्य वास्तव में छोटा और त्वरित होता है। कई प्रक्रियाएं एक उच्च स्तर की चीज हैं और जब तक एक शुरू करना एक आधे सेकंड के भीतर होता है, जो कि अधिकांश भाग के लिए बहुत ही उचित लगता है, क्या आप नहीं कहेंगे?
टिमोथी स्वान

16

बैश मुख्य रूप से एक बैच / शेल स्क्रिप्टिंग भाषा है, जिसमें विभिन्न डेटा प्रकारों के लिए कम समर्थन और नियंत्रण संरचनाओं के आसपास सभी प्रकार की quirks - संगतता मुद्दों का उल्लेख नहीं करना है।

कौन सा तेज है? न तो, क्योंकि आप यहां सेब की तुलना सेब से नहीं कर रहे हैं। यदि आपको एक एससीआई पाठ फ़ाइल को सॉर्ट करना था और आप zcat, सॉर्ट, यूनीक और सेड जैसे टूल का उपयोग कर रहे थे तो आप पायथन परफॉर्मेंस को समझेंगे।

हालांकि, यदि आपको एक उचित प्रोग्रामिंग वातावरण की आवश्यकता है जो फ्लोटिंग पॉइंट और विभिन्न नियंत्रण प्रवाह का समर्थन करता है, तो पायथन हाथों को जीतता है। यदि आपने लिखा है कि बैश और पायथन में एक पुनरावर्ती एल्गोरिदम, पायथन संस्करण परिमाण या अधिक के क्रम में जीत जाएगा।


13
तो मेरे शेख़ी का पूरा नैतिक है: सही काम के लिए सही उपकरण का उपयोग करें।
जस्टिन

2
फ़्लोटिंग पॉइंट को awk, bc जैसे उपकरणों के साथ और zsh / ksh जैसे गोले के साथ समर्थन किया जाता है, इसलिए आप पायथन को हाथों से जीतने वाले क्यों कहते हैं?
भूतडॉग ghost

4
क्योंकि वे उपकरण बैश नहीं हैं। मैं एक अलग अंतर की ओर इशारा कर रहा था। उन उपकरणों का उपयोग शेल स्क्रिप्ट में किया जाता है, लेकिन देशी बैश खुद फ्लोटिंग पॉइंट का समर्थन नहीं करता है।
जस्टिन

2
नहीं, यह अपने आप कोशिश करो। एक बड़ी लॉग फ़ाइल को gzip करें और कुछ फ़िल्टरिंग करने के लिए zcat, सॉर्ट इत्यादि का उपयोग करें और फिर देशी पायथन कामों का उपयोग करें। यह देशी उपकरणों का उपयोग करके काफी तेज है।
जस्टिन

6
@ अन्यायिन, हाँ, ये उपकरण बाश नहीं हैं, लेकिन वे प्राचीन काल से आसपास हैं और अक्सर शेल स्क्रिप्टिंग में उपयोग किए जाते हैं। यदि आप फ्लोटिंग पॉइंट चाहते हैं, तो awk / bc का उपयोग करें। इसके इन उपकरणों का एक संयोजन जो शेल स्क्रिप्टिंग को पायथन के समान शक्तिशाली बनाता है।
भूतडोग ghost ghost

12

यदि आप कम से कम प्रयास के साथ एक त्वरित उपयोगिता के साथ मिलकर कोब करना चाहते हैं, तो बैश अच्छा है। एक आवेदन के लिए एक आवरण दौर के लिए, बैश अमूल्य है।

कुछ भी हो सकता है कि आप सुधारों को जोड़ने के लिए बार-बार वापस आ रहे हों (शायद हमेशा नहीं) हालांकि पाइथन जैसी भाषा के लिए बेहतर अनुकूल है क्योंकि बैश कोड में 1000 से अधिक लाइनों को बनाए रखना बहुत दर्दनाक होता है। बैश कोड लंबी होने पर डिबग करने से भी चिढ़ता है ……।

इस तरह के प्रश्नों के साथ समस्या का एक हिस्सा मेरे अनुभव से यह है कि शेल स्क्रिप्ट आमतौर पर सभी कस्टम कार्य हैं। बहुत कम शेल स्क्रिप्टिंग कार्य हुए हैं, जो मैं उस जगह पर आया हूं जहां पहले से ही एक समाधान उपलब्ध है।


8

2 परिदृश्य हैं जहां बैश का प्रदर्शन कम से कम बराबर है, मेरा मानना ​​है:

  • कमांड लाइन उपयोगिताओं की स्क्रिप्टिंग
  • लिपियों को निष्पादित करने के लिए केवल कुछ समय लगता है; जहां पायथन इंटरप्रेटर शुरू होने से ऑपरेशन में ही ज्यादा समय लगता है

उस ने कहा, मैं आमतौर पर स्क्रिप्टिंग भाषा के प्रदर्शन के साथ खुद को वास्तव में चिंतित नहीं करता हूं। यदि प्रदर्शन एक वास्तविक मुद्दा है तो आप स्क्रिप्ट नहीं बल्कि प्रोग्राम (संभवतः पायथन में) कर सकते हैं।


4

मैं यह देर से जवाब मुख्य रूप से पोस्ट कर रहा हूं क्योंकि Google को यह सवाल पसंद है।

मेरा मानना ​​है कि समस्या और संदर्भ वास्तव में वर्कफ़्लो के बारे में होना चाहिए, न कि टूल्स के बारे में। समग्र दर्शन हमेशा "नौकरी के लिए सही उपकरण का उपयोग करें।" लेकिन इससे पहले कि यह आता है कि कई बार भूल जाते हैं जब वे उपकरणों में खो जाते हैं: "काम पूरा करें।"

जब मुझे कोई समस्या होती है जो पूरी तरह से परिभाषित नहीं होती है, तो मैं लगभग हमेशा बैश से शुरू करता हूं। मैंने बड़ी बैश स्क्रिप्ट में कुछ समस्याओं को हल किया है जो पठनीय और बनाए रखने योग्य हैं।

लेकिन समस्या कब शुरू हो जाती है और बश को क्या करना चाहिए? मेरे पास चेतावनी देने के लिए मेरे द्वारा उपयोग किए गए कुछ चेक हैं:

  1. क्या मैं चाहता हूँ कि बैश में 2 डी (या उच्चतर) सरणियाँ थीं? यदि हाँ, तो यह महसूस करने का समय है कि बैश एक महान डेटा प्रोसेसिंग भाषा नहीं है।
  2. क्या मैं अन्य उपयोगिताओं के लिए डेटा तैयार करने से अधिक काम कर रहा हूं, क्योंकि मैं वास्तव में उन उपयोगिताओं को चला रहा हूं? यदि हाँ, तो बैश का एहसास करने के लिए फिर से समय एक महान डेटा प्रोसेसिंग भाषा नहीं है।
  3. क्या मेरी स्क्रिप्ट को आसानी से प्रबंधित करने के लिए बहुत बड़ी हो रही है? यदि हां, यह महसूस करना महत्वपूर्ण है कि बैश स्क्रिप्ट लाइब्रेरी आयात कर सकता है, लेकिन अन्य भाषाओं की तरह इसमें पैकेज सिस्टम का अभाव है। यह वास्तव में अधिकांश लोगों की तुलना में "अपनी खुद की" भाषा है। तो फिर, यह कार्यक्षमता की एक बड़ी मात्रा में निर्मित है (कुछ कहते हैं बहुत ...)

सूची चलती जाती है। बॉटम-लाइन, जब आप अपनी स्क्रिप्ट को चलाने के लिए कड़ी मेहनत कर रहे होते हैं, जिसे आप फीचर जोड़ते हैं, तो बैश छोड़ने का समय आ जाता है।

मान लीजिए कि आपने अपने काम को पायथन में ले जाने का फैसला किया है। यदि आपकी बैश स्क्रिप्ट साफ़ हैं, तो प्रारंभिक रूपांतरण काफी सीधा है। यहां तक ​​कि कई कन्वर्टर्स / अनुवादक भी हैं जो आपके लिए पहला पास करेंगे।

अगला सवाल यह है कि आप पायथन की ओर बढ़ना क्या छोड़ते हैं?

  1. बाहरी उपयोगिताओं के लिए सभी कॉल को subprocessमॉड्यूल (या समतुल्य) से कुछ में लपेटा जाना चाहिए । ऐसा करने के कई तरीके हैं, और 3.7 तक इसे सही करने के लिए कुछ प्रयास किए गए (3.7 subprocess.run()अपने आप सभी सामान्य मामलों को संभालने के लिए बेहतर हुए)।

  2. आश्चर्यजनक रूप से, पायथन में कीबोर्ड (स्टडिन) को मतदान के लिए कोई मानक प्लेटफ़ॉर्म-नॉन-ब्लॉकिंग यूटिलिटी (टाइमआउट के साथ) नहीं है। बैश readकमांड सरल उपयोगकर्ता इंटरैक्शन के लिए एक भयानक उपकरण है। मेरा सबसे आम उपयोग एक स्पिनर को दिखाने के लिए है जब तक कि उपयोगकर्ता एक कुंजी दबाता है, जबकि यह सुनिश्चित करने के लिए कि प्रत्येक चीज़ अभी भी अच्छी तरह से चल रही है, एक मतदान फ़ंक्शन (प्रत्येक स्पिनर कदम के साथ) चल रहा है। यह एक कठिन समस्या है, क्योंकि यह पहली बार में दिखाई देगी, इसलिए मैं अक्सर बस बैश को एक कॉल करता हूं: महंगे, लेकिन यह ठीक वही करता है जिसकी आपको आवश्यकता है।

  3. यदि आप एक एम्बेडेड या मेमोरी-विवश प्रणाली पर विकसित कर रहे हैं, तो पायथन की मेमोरी पदचिह्न बैश की तुलना में कई गुना बड़ी हो सकती है (हाथ में काम के आधार पर)। साथ ही, मेमोरी में पहले से ही लगभग बैश का एक उदाहरण है, जो शायद पायथन के लिए नहीं है।

  4. स्क्रिप्ट्स के लिए जो एक बार चलती है और जल्दी से बाहर निकलती है, पाइथन का स्टार्टअप टाइम बैश से ज्यादा लंबा हो सकता है। लेकिन अगर स्क्रिप्ट में महत्वपूर्ण गणनाएं हैं, तो पायथन जल्दी से आगे बढ़ता है।

  5. पायथन में ग्रह पर सबसे व्यापक पैकेज प्रणाली है। जब बैश थोड़ा और भी जटिल हो जाता है, तो पायथन के पास शायद एक ऐसा पैकेज होता है जो बैश के पूरे हिस्से को एक कॉल करता है। हालांकि, उपयोग करने के लिए सही पैकेज (ओं) का पता लगाना पाइथोनिस्टा बनने का सबसे बड़ा और सबसे कठिन हिस्सा है। सौभाग्य से, Google और StackExchange आपके मित्र हैं।


2

मुझे नहीं पता कि यह सही है, लेकिन मैंने पाया है कि पाइथन / रूबी उन लिपियों के लिए बहुत बेहतर काम करता है जिनकी गणितीय गणना बहुत अधिक है। अन्यथा आपको dcकुछ अन्य "मनमाना सटीक कैलकुलेटर" का उपयोग करना होगा। यह बस एक बहुत बड़ा दर्द बन जाता है। अजगर के साथ आप फ्लोट्स बनाम इनट्स पर बहुत अधिक नियंत्रण रखते हैं और बहुत अधिक गणना और कभी-कभी प्रदर्शन करना बहुत आसान होता है।

विशेष रूप से, मैं बाइनरी जानकारी या बाइट्स को संभालने के लिए बैश स्क्रिप्ट के साथ कभी काम नहीं करूंगा। इसके बजाय मैं अजगर (शायद) या C ++ या यहाँ तक कि Node.JS जैसी किसी चीज़ का उपयोग करूँगा।


बैश अंकगणित कड़ाई से पूर्णांक है, इसलिए आपको कुछ और (जैसे कि awk या dc) कॉल करके और उससे आउटपुट कैप्चर करके फ्लोटिंग पॉइंट ऑपरेशन करना होगा। साधारण मौद्रिक चीजों को अक्सर आंतरिक रूप से केवल 100 से गुणा करके और आउटपुट में दशमलव बिंदु को समायोजित करके किया जा सकता है।
DocSalvager

0

प्रदर्शन बुद्धिमान दोनों समान रूप से कर सकते हैं, इसलिए यह प्रश्न बन जाता है कि कौन अधिक विकास समय बचाता है?

बैश अन्य कमांड को कॉल करने और उन्हें नया बनाने के लिए पाइपिंग पर निर्भर करता है। इसका यह फायदा है कि आप अन्य लोगों से उधार लिए गए कोड के साथ जल्दी से नए प्रोग्राम बना सकते हैं, चाहे वे किसी भी प्रोग्रामिंग भाषा का इस्तेमाल करते हों।

यह उप-कमांडों में बहुत अच्छी तरह से परिवर्तन का विरोध करने का साइड इफेक्ट है, क्योंकि उनके बीच का इंटरफ़ेस सिर्फ सादा पाठ है।

इसके अतिरिक्त बैश इस पर बहुत अनुमित है कि आप इस पर कैसे लिख सकते हैं। इसका मतलब यह व्यापक संदर्भ के लिए अच्छी तरह से काम करेगा, लेकिन यह प्रोग्रामर पर भी निर्भर करता है कि वह साफ-सुथरे तरीके से कोडिंग का इरादा रखता है। अन्यथा बैश आपको एक गड़बड़ बनाने से नहीं रोकेंगे।

अजगर शैली पर अधिक संरचित है, इसलिए एक गन्दा प्रोग्रामर गन्दा नहीं होगा। यह लिनक्स के बाहर ऑपरेटिंग सिस्टम पर भी काम करेगा, अगर आपको उस तरह की पोर्टेबिलिटी की आवश्यकता है, तो यह तुरंत अधिक उपयुक्त होगा।

लेकिन यह अन्य कमांड को कॉल करने के लिए उतना आसान नहीं है। इसलिए यदि आपका ऑपरेटिंग सिस्टम यूनिक्स है तो सबसे अधिक संभावना है कि आप पाएंगे कि बैश पर विकसित करना सबसे तेजी से विकसित होने वाला तरीका है।

बैश का उपयोग कब करें:

  • यह एक गैर चित्रमय कार्यक्रम है, या एक चित्रमय का इंजन है।
  • यह केवल यूनिक्स के लिए है।

पायथन का उपयोग कब करें:

  • यह एक चित्रमय कार्यक्रम है।
  • यह विंडोज पर काम करेगा।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.