Reed Copsey ve Alex Martelli tarafından verilen cevaplara katılırken, bir fark daha belirtmek isterim - Global Tercüman Kilidi (GIL). IronPython, GIL'in sınırlamalarına sahip olmasa da, CPython sahiptir - bu nedenle, GIL'in bir darboğaz olduğu uygulamalar için, örneğin bazı çok çekirdekli senaryolarda, IronPython'un Python.NET'e göre bir avantajı olduğu görülmektedir.
Python.NET belgelerinden:
Gömücüler için Önemli Not: Python serbest iş parçacıklı değildir ve çok iş parçacıklı uygulamaların Python yorumlayıcısıyla güvenli bir şekilde etkileşime girmesine izin vermek için genel bir yorumlayıcı kilidi kullanır. Bununla ilgili çok daha fazla bilgi, www.python.orgWeb Sitesindeki Python C API belgelerinde mevcuttur
.
Python'u yönetilen bir uygulamaya yerleştirirken, GIL'i Python'u bir C veya C ++ uygulamasına yerleştirirken yaptığınız gibi yönetmeniz gerekir.
Ad Python.Runtimealanı tarafından sağlanan herhangi bir nesne veya API ile etkileşime girmeden önce
, çağırma kodunun, PythonEngine.AcquireLockyöntemi çağırarak Python genel yorumlayıcı kilidini almış olması gerekir
. Bu kuralın tek istisnası
PythonEngine.Initialize, başlangıçta GIL edinilmeden çağrılabilen yöntemdir.
Python API'lerinin kullanılması bittiğinde, yönetilen kodun PythonEngine.ReleaseLockGIL'i serbest bırakmak için bir karşılık gelen çağırması
ve diğer iş parçacıklarının Python'u kullanmasına izin vermesi gerekir.
AcquireLockVe ReleaseLock
yöntemler yönetilmeyen üzerinde ince sargı olan PyGILState_Ensureve
PyGILState_ReleasePython API fonksiyonları ve bu API'ler için dokümantasyon yönetilen sürümleri için geçerlidir.
Diğer bir konu ise IDE desteğidir. CPython muhtemelen şu anda IronPython'dan daha iyi IDE desteğine sahiptir - bu nedenle bu, birini diğerine tercih etmede bir faktör olabilir.