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.org
Web 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.Runtime
alanı tarafından sağlanan herhangi bir nesne veya API ile etkileşime girmeden önce
, çağırma kodunun, PythonEngine.AcquireLock
yö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.ReleaseLock
GIL'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.
AcquireLock
Ve ReleaseLock
yöntemler yönetilmeyen üzerinde ince sargı olan PyGILState_Ensure
ve
PyGILState_Release
Python 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.