Tout en étant d'accord avec les réponses données par Reed Copsey et Alex Martelli, j'aimerais souligner une autre différence : le verrou d'interprète global (GIL). Alors qu'IronPython n'a pas les limitations du GIL, CPython en a - il semblerait donc que pour les applications où le GIL est un goulot d'étranglement, disons dans certains scénarios multicore, IronPython a un avantage sur Python.NET.
Extrait de la documentation de Python.NET :
Note importante pour les intégrateurs : Python n'est pas free-threadé et utilise un verrouillage global de l'interpréteur pour permettre à tous les utilisateurs de s'exprimer. global de l'interpréteur pour permettre applications multithreads d'interagir d'interagir en toute sécurité avec l'interpréteur en toute sécurité. De plus amples informations sur ce sujet sont disponibles dans le document Python C API sur le site www.python.org
Site web.
Lorsque vous intégrez Python dans une application vous devez gérer le GIL de la même manière que vous le feriez Python dans une application C ou C++. ou C++.
Avant d'interagir avec l'un des ou les APIs fournies par le Python.Runtime
le code d'appel doit avoir acquis le global Python en appelant la fonction PythonEngine.AcquireLock
méthode. Le site seule exception à cette règle est la PythonEngine.Initialize
qui peut être appelée au démarrage sans sans avoir acquis le GIL.
Lorsque vous avez terminé d'utiliser les API Python, le code géré doit appeler une PythonEngine.ReleaseLock
pour libérer la GIL et permettre aux autres threads d'utiliser Python.
Le site AcquireLock
y ReleaseLock
sont des enveloppes minces sur les méthodes non gérées PyGILState_Ensure
et PyGILState_Release
de l'API Python, et la documentation de ces API ces API s'appliquent à la version gérée gérées.
Un autre problème est le support IDE. CPython a probablement un meilleur support IDE qu'IronPython à l'heure actuelle, ce qui peut être un facteur dans le choix de l'un ou de l'autre.