Obwohl ich den Antworten von Reed Copsey und Alex Martelli zustimme, möchte ich auf einen weiteren Unterschied hinweisen - das Global Interpreter Lock (GIL). Während IronPython nicht die Einschränkungen der GIL aufweist, hat CPython dies - so scheint es, dass IronPython für Anwendungen, bei denen die GIL ein Engpass ist, beispielsweise in bestimmten Multicore-Szenarien, einen Vorteil gegenüber Python.NET hat.
Aus der Python.NET-Dokumentation:
Wichtiger Hinweis für Einbettungsprogramme: Python ist kein Thread-Thread und verwendet eine globale Interpretersperre, damit Multithread-Anwendungen sicher mit dem Python-Interpreter interagieren können. Weitere Informationen hierzu finden Sie in der Python C-API-Dokumentation auf der
www.python.orgWebsite.
Wenn Sie Python in eine verwaltete Anwendung einbetten, müssen Sie die GIL genauso verwalten wie beim Einbetten von Python in eine C- oder C ++ - Anwendung.
Vor der Interaktion mit einem der vom Python.RuntimeNamespace bereitgestellten Objekte oder APIs
muss der aufrufende Code die globale Python-Interpretersperre durch Aufrufen der
PythonEngine.AcquireLockMethode erhalten haben. Die einzige Ausnahme von dieser Regel ist die
PythonEngine.Initialize Methode, die beim Start aufgerufen werden kann, ohne die GIL erworben zu haben.
Wenn Sie die Python-APIs nicht mehr verwenden, muss der verwaltete Code einen entsprechenden Code aufrufen
PythonEngine.ReleaseLock , um die GIL freizugeben und anderen Threads die Verwendung von Python zu ermöglichen.
Die AcquireLockund ReleaseLock
-Methoden sind Thin Wrapper über die nicht verwalteten PyGILState_Ensureund
PyGILState_ReleaseFunktionen der Python-API, und die Dokumentation für diese APIs gilt für die verwalteten Versionen.
Ein weiteres Problem ist die IDE-Unterstützung. CPython hat derzeit wahrscheinlich eine bessere IDE-Unterstützung als IronPython - daher kann dies ein Faktor bei der Auswahl eines über dem anderen sein.