Tout en étant d'accord avec les réponses données par Reed Copsey et Alex Martelli, je voudrais souligner une autre différence: le Global Interpreter Lock (GIL). Alors qu'IronPython n'a pas les limites du GIL, CPython en a - il semblerait donc que pour les applications où le GIL est un goulot d'étranglement, par exemple dans certains scénarios multicœurs, IronPython a un avantage sur Python.NET.
À partir de la documentation Python.NET:
Remarque importante pour les intégrateurs: Python n'est pas à thread libre et utilise un verrou d'interpréteur global pour permettre aux applications multithreads d'interagir en toute sécurité avec l'interpréteur Python. De plus amples informations à ce sujet sont disponibles dans la documentation de l'API Python C sur le
www.python.org
site Web.
Lorsque vous intégrez Python dans une application gérée, vous devez gérer le GIL de la même manière que vous le feriez lors de l'incorporation de Python dans une application C ou C ++.
Avant d'interagir avec l'un des objets ou API fournis par l'
Python.Runtime
espace de noms, le code appelant doit avoir acquis le verrou d'interpréteur global Python en appelant la
PythonEngine.AcquireLock
méthode. La seule exception à cette règle est la
PythonEngine.Initialize
méthode, qui peut être appelée au démarrage sans avoir acquis le GIL.
Une fois l'utilisation des API Python terminée, le code managé doit appeler un correspondant
PythonEngine.ReleaseLock
pour libérer le GIL et permettre à d'autres threads d'utiliser Python.
Les
méthodes AcquireLock
et ReleaseLock
sont des wrappers légers sur les fonctions PyGILState_Ensure
et
non managées PyGILState_Release
de l'API Python, et la documentation de ces API s'applique aux versions gérées.
Un autre problème est le support IDE. CPython a probablement un meilleur support IDE à l'heure actuelle qu'IronPython - cela peut donc être un facteur dans le choix de l'un par rapport à l'autre.