2009-07-23 22 views
68

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

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

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

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

  • उत्तर

    61

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

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

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

    +10

    IronPython "हल्के" अपवाद अब जो बहुत तेजी से कर रहे हैं है। PyBench से एक TryRaiseExcept परीक्षण जो 60 गुना धीमा प्रदर्शन करता है, अब केवल 1.6 गुना धीमा है। WithRaiseExcept अभी भी धीमा है, लेकिन पहले से 4 गुना तेज है। अधिकांश अन्य परीक्षणों के लिए, आईपी वास्तव में * तेज़ * है। [** IronPython 2.7 बनाम CPython 2.7 प्रदर्शन की तुलना **] (http://ironpython.codeplex.com/wikipage?title=IP27A1VsCPy27Perf) (पूरा [मानक की सूची] (http://ironpython.codeplex.com/wikipage? title = IronPython% 20Performance))। – Athari

    7

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

    7

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

    +0

    मैं vs20xx – user3800527

    26

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

    Python.NET प्रलेखन से: embedders के लिए

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

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

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

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

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

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

    +4

    PyDev ग्रहण प्लगइन CPython, IronPython और Jython का समर्थन करता है की अपनी ओर से नहीं, क्योंकि यह संदेह है। –

    +3

    @ कुनट: ठीक है, लेकिन जब मैंने यह जवाब लिखा था तो वह स्थिति नहीं थी। –

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

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

    3. IronPython से सी कुछ क्षेत्रों में # तेजी से लेकिन CPython तुलना में तेजी से नहीं है, लेकिन आप इस तरह आ रही समस्याओं से किसी भी भाषा के लिए IronPython लिंक कर सकते हैं लेकिन फिर आप CPython साथ भी ऐसा ही कर सकते हैं।

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

    11

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

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

    2

    2016.

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

    +0

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

    +0

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

    0

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

    संबंधित मुद्दे