Sementara setuju dengan jawaban yang diberikan oleh Reed Copsey dan Alex Martelli, saya ingin menunjukkan satu perbedaan lebih lanjut - Global Interpreter Lock (GIL). Sementara IronPython tidak memiliki batasan GIL, CPython memilikinya - jadi akan tampak bahwa untuk aplikasi-aplikasi di mana GIL adalah penghambat, katakanlah dalam skenario multicore tertentu, IronPython memiliki keunggulan dibandingkan Python.NET.
Dari dokumentasi Python.NET:
Catatan Penting untuk embedder: Python tidak free-threaded dan menggunakan kunci interpreter global untuk memungkinkan aplikasi multi-threaded berinteraksi dengan aman dengan interpreter Python. Lebih banyak informasi tentang ini tersedia di dokumentasi Python C API di
www.python.org
Situs Web.
Saat menyematkan Python dalam aplikasi terkelola, Anda harus mengelola GIL dengan cara yang sama seperti saat Anda menyematkan Python dalam aplikasi C atau C ++.
Sebelum berinteraksi dengan objek atau API apa pun yang disediakan oleh
Python.Runtime
namespace, kode pemanggil harus telah memperoleh kunci interpreter global Python dengan memanggil
PythonEngine.AcquireLock
metode tersebut. Satu-satunya pengecualian untuk aturan ini adalah
PythonEngine.Initialize
metode, yang dapat dipanggil saat permulaan tanpa memperoleh GIL.
Setelah selesai menggunakan Python API, kode yang dikelola harus memanggil yang sesuai
PythonEngine.ReleaseLock
untuk merilis GIL dan mengizinkan utas lain menggunakan Python.
Metode AcquireLock
dan ReleaseLock
adalah pembungkus tipis atas fungsi PyGILState_Ensure
dan yang
tidak dikelola PyGILState_Release
dari Python API, dan dokumentasi untuk API tersebut berlaku untuk versi yang dikelola.
Masalah lainnya adalah dukungan IDE. CPython mungkin memiliki dukungan IDE yang lebih baik saat ini daripada IronPython - jadi ini mungkin menjadi faktor dalam memilih salah satu dari yang lain.