रीड कोपसे और एलेक्स मार्टेली द्वारा दिए गए जवाबों से सहमत होते हुए, मैं एक और अंतर बताना चाहूंगा - ग्लोबल इंटरप्रेटर लॉक (जीआईएल)। जबकि आयरनपाइथन में GIL की सीमाएं नहीं होती हैं, CPython करता है - इसलिए ऐसा प्रतीत होता है कि उन अनुप्रयोगों के लिए जहां GIL एक अड़चन है, कुछ मल्टीकोर परिदृश्यों में कहें, Python.NET के लिए IronPython का एक फायदा है।
Python.NET प्रलेखन से:
एम्बेड के लिए महत्वपूर्ण नोट: पायथन मुक्त-थ्रेडेड नहीं है और पायथन दुभाषिया के साथ सुरक्षित रूप से बातचीत करने के लिए बहु-थ्रेडेड अनुप्रयोगों की अनुमति देने के लिए एक वैश्विक दुभाषिया लॉक का उपयोग करता है। इसके बारे में बहुत अधिक जानकारी www.python.org
वेबसाइट पर पायथन सी एपीआई प्रलेखन में उपलब्ध है
।
जब एक प्रबंधित एप्लिकेशन में पायथन को एम्बेड किया जाता है, तो आपको GIL को उसी तरह से प्रबंधित करना होगा जब आप C या C ++ एप्लिकेशन में पायथन को एम्बेड कर रहे हों।
Python.Runtime
नामस्थान द्वारा प्रदान की गई किसी भी वस्तु या एपीआई के साथ बातचीत करने से पहले
, कॉलिंग कोड को PythonEngine.AcquireLock
विधि को कॉल करके पायथन ग्लोबल इंटरप्रेटर लॉक का अधिग्रहण करना चाहिए
। इस नियम का एकमात्र अपवाद वह
PythonEngine.Initialize
विधि है, जिसे जीआईएल का अधिग्रहण किए बिना स्टार्टअप में कहा जा सकता है।
जब Python API का उपयोग करना समाप्त हो जाता है, तो प्रबंधित कोड को PythonEngine.ReleaseLock
GIL जारी करने के लिए संबंधित कॉल करना चाहिए
और अन्य थ्रेड्स को Python का उपयोग करने की अनुमति देनी चाहिए।
AcquireLock
और ReleaseLock
तरीकों अप्रबंधित से अधिक पतली रैपर हैं PyGILState_Ensure
और
PyGILState_Release
अजगर एपीआई से काम करता है, और उन एपीआई के लिए प्रलेखन कामयाब संस्करणों पर लागू होता।
एक अन्य मुद्दा आईडीई समर्थन है। CPython के पास वर्तमान में IronPython की तुलना में बेहतर IDE समर्थन है - इसलिए यह एक के ऊपर एक को चुनने में एक कारक हो सकता है।