ในขณะที่เห็นด้วยกับคำตอบของ Reed Copsey และ Alex Martelli ฉันต้องการชี้ให้เห็นความแตกต่างอีกประการหนึ่งนั่นคือ Global Interpreter Lock (GIL) แม้ว่า IronPython จะไม่มีข้อ จำกัด ของ GIL แต่ CPython ก็ทำเช่นนั้นดังนั้นดูเหมือนว่าสำหรับแอปพลิเคชันเหล่านั้นที่ GIL เป็นคอขวดให้พูดในสถานการณ์มัลติคอร์บางสถานการณ์ IronPython มีข้อได้เปรียบเหนือ Python.NET
จากเอกสาร Python.NET:
หมายเหตุสำคัญสำหรับโปรแกรมฝังตัว: Python ไม่ใช่เธรดอิสระและใช้ล็อกล่ามส่วนกลางเพื่ออนุญาตให้แอปพลิเคชันแบบมัลติเธรดโต้ตอบกับล่าม Python ได้อย่างปลอดภัย ข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้มีอยู่ในเอกสาร Python C API บน
www.python.org
เว็บไซต์
เมื่อฝัง Python ในแอปพลิเคชันที่มีการจัดการคุณต้องจัดการ GIL ในลักษณะเดียวกับที่คุณทำเมื่อฝัง Python ในแอปพลิเคชัน C หรือ C ++
ก่อนที่จะโต้ตอบกับอ็อบเจ็กต์หรือ API ใด ๆ ที่
Python.Runtime
เนมสเปซมีให้รหัสการเรียกต้องได้รับการล็อกตัวแปลส่วนกลางของ Python โดยเรียกใช้
PythonEngine.AcquireLock
เมธอด ข้อยกเว้นเดียวของกฎนี้คือ
PythonEngine.Initialize
วิธีการซึ่งอาจเรียกได้ว่าเริ่มต้นโดยไม่ต้องได้รับ GIL
เมื่อใช้ Python API เสร็จแล้วโค้ดที่ได้รับการจัดการจะต้องเรียกสิ่งที่เกี่ยวข้อง
PythonEngine.ReleaseLock
เพื่อปล่อย GIL และอนุญาตให้เธรดอื่นใช้ Python
AcquireLock
และReleaseLock
วิธีการห่อมีบางช่วงที่ไม่มีการจัดการPyGILState_Ensure
และ
PyGILState_Release
ฟังก์ชั่นจากงูหลาม API และเอกสารสำหรับ API ผู้ใช้กับรุ่นที่มีการจัดการ
อีกปัญหาหนึ่งคือการสนับสนุน IDE CPython อาจมีการรองรับ IDE ที่ดีกว่า IronPython ในปัจจุบัน - ดังนั้นนี่อาจเป็นปัจจัยในการเลือกอย่างใดอย่างหนึ่ง