Погоджуючись з відповідями Рід Копсі та Алекс Мартеллі, я хотів би зазначити ще одну відмінність - Глобальний перекладач (GIL). Хоча IronPython не має обмежень GIL, CPython - тому, здається, для тих додатків, де GIL є вузьким місцем, скажімо в деяких багатоядерних сценаріях, IronPython має перевагу над Python.NET.
З документації Python.NET:
Важлива примітка для вбудовувачів: Python не має вільних потоків і використовує глобальну блокування інтерпретатора, щоб багатопотокові програми могли безпечно взаємодіяти з інтерпретатором Python. Набагато більше інформації про це можна знайти в документації API Python C на
www.python.org
веб-сайті.
При вбудовуванні Python в керовану програму, ви повинні керувати GIL точно так само, як і при вбудовуванні Python в програму C або C ++.
Перш ніж взаємодіяти з будь-якими об'єктами або API, наданими
Python.Runtime
простором імен, викличний код повинен отримати блокування глобального інтерпретатора Python, викликавши
PythonEngine.AcquireLock
метод. Єдиним винятком з цього правила є
PythonEngine.Initialize
метод, який може бути викликаний під час запуску без отримання GIL.
Завершивши використання API Python, керований код повинен викликати відповідний,
PythonEngine.ReleaseLock
щоб звільнити GIL і дозволити іншим потокам використовувати Python.
Методи AcquireLock
and і ReleaseLock
являють собою тонкі обгортки над некерованими PyGILState_Ensure
та
PyGILState_Release
функціями Python API, і документація до цих API стосується керованих версій.
Інше питання - підтримка IDE. CPython, мабуть, зараз має кращу підтримку IDE, ніж IronPython - тому це може бути фактором при виборі одного над іншим.