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.orgsite 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.Runtimeespace de noms, le code appelant doit avoir acquis le verrou d'interpréteur global Python en appelant la
PythonEngine.AcquireLockméthode. La seule exception à cette règle est la
PythonEngine.Initializemé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.ReleaseLockpour libérer le GIL et permettre à d'autres threads d'utiliser Python.
Les
méthodes AcquireLocket ReleaseLocksont des wrappers légers sur les fonctions PyGILState_Ensureet
non managées PyGILState_Releasede 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.