Соглашаясь с ответами Рида Копси и Алекса Мартелли, я хотел бы отметить еще одно отличие - глобальную блокировку интерпретатора (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, поэтому это может быть фактором при выборе одного из них.