लौहपथ बनाम पायथन .NET


88

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

थोड़ा शोध से पता चला कि मेरे पास दो विकल्प हैं:

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

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

जवाबों:


71

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

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

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


11
IronPython में अब "हल्के" अपवाद हैं जो बहुत तेज हैं। PyBench से एक TryRaiseExcept परीक्षण जिसने 60 बार धीमा प्रदर्शन किया, अब यह सिर्फ 1.6 गुना धीमा है। WithRaiseExcept अभी भी धीमा है, लेकिन पहले की तुलना में 4 गुना तेज है। अधिकांश अन्य परीक्षणों के लिए, IPy वास्तव में तेज़ हैआयरनपीथॉन 2.7 बनाम सीपीथॉन 2.7 प्रदर्शन तुलना ( बेंचमार्क की पूरी सूची )।
अठारी

29

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

Python.NET प्रलेखन से:

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

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

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

जब Python API का उपयोग करना समाप्त हो जाता है, तो प्रबंधित कोड को PythonEngine.ReleaseLockGIL जारी करने के लिए संबंधित कॉल करना चाहिए और अन्य थ्रेड्स को Python का उपयोग करने की अनुमति देनी चाहिए।

AcquireLockऔर ReleaseLock तरीकों अप्रबंधित से अधिक पतली रैपर हैं PyGILState_Ensureऔर PyGILState_Releaseअजगर एपीआई से काम करता है, और उन एपीआई के लिए प्रलेखन कामयाब संस्करणों पर लागू होता।

एक अन्य मुद्दा आईडीई समर्थन है। CPython के पास वर्तमान में IronPython की तुलना में बेहतर IDE समर्थन है - इसलिए यह एक के ऊपर एक को चुनने में एक कारक हो सकता है।


4
PyDev ग्रहण प्लगइन CPython, IronPython और Jython का समर्थन करता है।
नॉट एल्डहुसेट

3
@ अखरोट: सही है, लेकिन यह स्थिति नहीं थी जब मैंने यह जवाब लिखा था।
विनय साजिप

18

CPython C-API (numpy, scipy, matplotlib, pandas, cython, आदि) पर भरोसा करने वाले अधिकांश वैज्ञानिक और संख्यात्मक पायथन पुस्तकालय ज्यादातर CPython के तहत काम कर रहे हैं, इसलिए उस स्थिति में आपका सबसे अच्छा शर्त पायथननेट है (अन्य नाम - Python.NET और .NET के लिए पायथन)। CPython GUI बाइंडिंग जैसे WxWidgets, PyQt / PySide, GTK, Kivy, आदि के लिए भी यही बात लागू होती है, हालाँकि pythonnet और IronPython दोनों WPF और WinForms का उपयोग कर सकते हैं।

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


9

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


6

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


मुझे इस पर संदेह है क्योंकि इसका बनाम20xx का हिस्सा नहीं है
user3800527

4

2016 तक।

मेरी कंपनी में हमने IronPython का उपयोग किया था, लेकिन हम प्रदर्शनों से संतुष्ट नहीं थे (ज्यादातर मेमोरी उपयोग - कचरा कलेक्टर बहुत धीमा था) इसलिए हमने मानक पायथन पर स्विच करने का निर्णय लिया और इसे Zeroce-s ICE का उपयोग करके .Net के साथ एकीकृत किया।


मुझे आश्चर्य है कि प्रदर्शन प्रक्रियाओं के लिए विभिन्न प्रक्रियाओं के बीच आरपीसी को चुना गया। एक ही प्रक्रिया में pythonnet का उपयोग करने की सबसे अधिक संभावना CPython + .NET इस दृष्टिकोण से तेज होनी चाहिए। जीरो ICE के लिए ध्यान दें कि यह GPL-लाइसेंस प्राप्त है और इसलिए वाणिज्यिक अनुप्रयोगों के लिए बहुत उपयुक्त नहीं है।
denfromufa

एक दिलचस्प समाधान, धन्यवाद। लाइसेंस के लिए, ICE के लिए एक वाणिज्यिक विकल्प है: zeroc.com/licensing
Atorian

3

वर्तमान में आयरनथन, पायथन 3.6 का समर्थन नहीं करता है (केवल 2.7)

से IronPython 3 "IronPython 3 अभी तक नहीं दिया जाता है की बनाता है।"


वे वर्तमान में v3 पर काम कर रहे हैं, लेकिन बहुत धीरे-धीरे: github.com/IronLanguages/ironpython3
LimpingNinja

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

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

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

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


1

आयरन पायथन मूल रूप से पायथन 2.7 है। एकीकृत समर्थन के साथ। यह संभवतया कभी भी पायथन 3 को सपोर्ट नहीं करेगा। यह सी और पायथन लाइब्रेरी में खो देता है, हालांकि ट्विस्ट की ओर से नेट तक पहुंच होती है और इसे सी # के साथ बढ़ाया जा सकता है। इसलिए अगर आप C # पहले से इस्तेमाल करते हैं तो आयरन पायथन एक बोनस है।


-1

मैं मुख्य रूप से .NET के लिए पायथन पसंद करता हूं, क्योंकि आयरनपाइथन को प्रबंधित कोड के रूप में संकलित किया गया है, जिसे आसानी से विघटित किया जा सकता है (जो मुझे सबसे ज्यादा नफरत है), लेकिन py2exe या pyinstaller के साथ आप एक अप्रबंधित एप्लिकेशन के रूप में NET के साथ पायथन को संकलित कर सकते हैं।

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