python - आयरनपीथन बनाम पायथन.NET




ironpython cpython (7)

  1. Ironpython सी # की तरह है, यह बदले में स्थिर प्रीबिल्ट पुस्तकालयों पर निर्भर करता है जबकि सी # के विपरीत एक गतिशील भाषा है।

  2. Cpython सी ++ की तरह है जैसे आयरनपीथॉन एक गतिशील भाषा है और गतिशील पुस्तकालयों तक पहुंच है जो बदले में सबकुछ लिखने के लिए मजबूर हो जाती है।

  3. आयरनपीथॉन कुछ क्षेत्रों में सी # से तेज़ है लेकिन सीपीथन से तेज़ नहीं है, हालांकि आप आयरनपीथॉन को किसी भी भाषा में आने वाली समस्याओं से जोड़ सकते हैं लेकिन फिर आप Cpython के साथ ऐसा ही कर सकते हैं।

आप जो भी चुनते हैं उसके बावजूद एक मजाकिया, सरल और शक्तिशाली भाषा!

मैं पाइथन कोड से सी # में लिखी कुछ .NET असेंबली एक्सेस करना चाहता हूं।

एक छोटे से शोध से पता चला कि मेरे पास दो विकल्प हैं:

  • .NET इंटरफ़ेस क्षमता / समर्थन के साथ IronPython अंतर्निहित
  • पायथन .NET पैकेज के साथ पायथन

दोनों समाधानों के बीच व्यापार-बंद क्या हैं?


2016 के लिए।

मेरी कंपनी में हमने आयरनपीथन का इस्तेमाल किया, लेकिन हम प्रदर्शन से संतुष्ट नहीं थे (ज्यादातर मेमोरी उपयोग - कचरा कलेक्टर बहुत धीमा था) इसलिए हमने मानक पायथन पर स्विच करने और जेरोसे-आईसीई का उपयोग करके नेट को एकीकृत करने का फैसला किया।


आयरनपीथन ".NET- मूल" है - इसलिए यदि आप अपने पायथन कोड को .NET के साथ पूरी तरह से एकीकृत करना चाहते हैं तो यह बेहतर होगा; Python.NET क्लासिक पायथन के साथ काम करता है, इसलिए यह आपको अपने पायथन कोड की "बांह की लंबाई" को .NET से दूर रखने देता है। (ध्यान दें कि इस कोड के साथ आप वास्तव में अपने आयरनपीथन कोड से सीपीथॉन के लिए लिखे गए एक्सटेंशन का उपयोग कर सकते हैं, ताकि यह किसी भी भेदभाव की स्थिति न हो)।


आयरनपीथन माइक्रोसॉफ्ट से आता है, इसलिए मैं अपने आंत के साथ जाऊंगा और इसे पहले इस्तेमाल करूँगा क्योंकि आपको लगता है कि यह अन्य एमएसएफटी प्रौद्योगिकियों के साथ अच्छा खेलेंगे।


यदि आप मुख्य रूप से .NET ढांचे पर अपना कोड आधार बनाना चाहते हैं, तो मैं अत्यधिक आयरनपीथन बनाम पायथन.NET की अनुशंसा करता हूं। IronPython बहुत अधिक देशी .NET है - इसलिए यह अन्य .NET languges के साथ एकीकृत करते समय बस महान काम करता है।

Python.NET अच्छा है यदि आप .NET से एक या दो घटक को मानक पायथन एप्लिकेशन में एकीकृत करना चाहते हैं।

IronPython का उपयोग करते समय उल्लेखनीय अंतर हैं - लेकिन उनमें से अधिकतर काफी सूक्ष्म हैं। Python.NET मानक CPython रनटाइम का उपयोग करता है, इसलिए यह विकी पृष्ठ दो कार्यान्वयन के बीच अंतरों की एक प्रासंगिक चर्चा है। अपवादों की लागत में सबसे बड़ा अंतर होता है - इसलिए मानक पाइथन पुस्तकालयों में से कुछ उनके कार्यान्वयन के कारण आयरनपीथन में भी प्रदर्शन नहीं करते हैं।


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

Python.NET दस्तावेज़ से:

एम्बेडेड के लिए महत्वपूर्ण नोट: पायथन फ्री-थ्रेडेड नहीं है और पाइथन दुभाषिया के साथ सुरक्षित रूप से इंटरैक्ट करने के लिए बहु-थ्रेडेड अनुप्रयोगों को इंटरैक्ट करने की अनुमति देने के लिए वैश्विक दुभाषिया लॉक का उपयोग करता है। इसके बारे में अधिक जानकारी www.python.org वेबसाइट पर पाइथन सी एपीआई दस्तावेज़ में उपलब्ध है।

एक प्रबंधित अनुप्रयोग में पायथन को एम्बेड करते समय, आपको सीआई या सी ++ एप्लिकेशन में पायथन को एम्बेड करते समय जीआईएल को उसी तरह प्रबंधित करना होगा।

Python.Runtime द्वारा प्रदान की गई किसी भी ऑब्जेक्ट या एपीआई के साथ बातचीत करने से पहले। Python.Runtime नेमस्पेस, कॉलिंग कोड को PythonEngine.AcquireLock विधि को कॉल करके पायथन ग्लोबल दुभाषिया लॉक प्राप्त करना होगा। इस नियम का एकमात्र अपवाद PythonEngine.Initialize है। PythonEngine.Initialize विधि, जिसे जीआईएल हासिल किए बिना स्टार्टअप पर बुलाया जा सकता है।

पाइथन एपीआई का उपयोग करते समय, प्रबंधित कोड को जीआईएल को रिहा करने के लिए संबंधित PythonEngine.ReleaseLock । रिलीज PythonEngine.ReleaseLock को कॉल करना होगा और अन्य धागे को पायथन का उपयोग करने की अनुमति देना होगा।

AcquireLock और ReleaseLock विधियां पाइथन API से अप्रबंधित PyGILState_Ensure और PyGILState_Release फ़ंक्शंस पर पतली रैपर हैं, और उन API के लिए दस्तावेज़ प्रबंधित संस्करणों पर लागू होते हैं।

एक और मुद्दा आईडीई समर्थन है। सीपीथॉन में वर्तमान में आयरनपीथन से बेहतर आईडीई समर्थन है - इसलिए यह एक दूसरे के चयन में एक कारक हो सकता है।


सीपीथॉन सी-एपीआई (numpy, scipy, matplotlib, pandas, cython, आदि) पर भरोसा करते हुए अधिकांश वैज्ञानिक और संख्यात्मक पायथन पुस्तकालय ज्यादातर सीपीथन के तहत काम कर रहे हैं, इसलिए उस स्थिति में आपकी सर्वश्रेष्ठ शर्त पाइथननेट (अन्य नाम - पायथन .NET और .NET के लिए पायथन)। सीपीथॉन जीयूआई बाइंडिंग्स जैसे कि WxWidgets, PyQt / PySide, GTK, Kivy, आदि के लिए भी यही सच है, हालांकि दोनों पायथननेट और आयरनपीथन डब्ल्यूपीएफ और विनफॉर्म का उपयोग कर सकते हैं।

और अंततः आयरनपीथन पूरी तरह से पाइथन 3 का समर्थन नहीं करता है।





python.net