Соглашаясь с ответами Рида Копси и Алекса Мартелли, я хотел бы отметить еще одно отличие - глобальную блокировку интерпретатора (GIL). В то время как IronPython не имеет ограничений GIL, CPython имеет - поэтому может показаться, что для тех приложений, где GIL является узким местом, скажем, в определенных многоядерных сценариях, IronPython имеет преимущество перед Python.NET.
Из документации Python.NET:
Важное примечание для встраиваемых программ: Python не является свободнопоточным и использует глобальную блокировку интерпретатора, чтобы позволить многопоточным приложениям безопасно взаимодействовать с интерпретатором Python. Более подробная информация об этом доступна в документации Python C API на
www.python.orgвеб-сайте.
При встраивании Python в управляемое приложение вы должны управлять GIL точно так же, как при встраивании Python в приложение C или C ++.
Перед взаимодействием с любым из объектов или API, предоставляемых
Python.Runtimeпространством имен, вызывающий код должен получить глобальную блокировку интерпретатора Python путем вызова
PythonEngine.AcquireLockметода. Единственным исключением из этого правила является
PythonEngine.Initializeметод, который можно вызывать при запуске без получения GIL.
По завершении использования API-интерфейсов Python управляемый код должен вызвать соответствующий вызов,
PythonEngine.ReleaseLockчтобы выпустить GIL и разрешить другим потокам использовать Python.
AcquireLockИ ReleaseLock
методы представляют собой тонкие оболочки над неуправляемыми PyGILState_Ensureи
PyGILState_Releaseфункциями из API Python и документация для этих API , относится к управляемым версиям.
Другой вопрос - поддержка IDE. CPython, вероятно, в настоящее время имеет лучшую поддержку IDE, чем IronPython, поэтому это может быть фактором при выборе одного из них.