रीड कोपसे और एलेक्स मार्टेली द्वारा दिए गए जवाबों से सहमत होते हुए, मैं एक और अंतर बताना चाहूंगा - ग्लोबल इंटरप्रेटर लॉक (जीआईएल)। जबकि आयरनपाइथन में 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 समर्थन है - इसलिए यह एक के ऊपर एक को चुनने में एक कारक हो सकता है।