Ao concordar com as respostas dadas por Reed Copsey e Alex Martelli, gostaria de apontar mais uma diferença - o Global Interpreter Lock (GIL). Enquanto o IronPython não tem as limitações do GIL, o CPython tem - então parece que, para aquelas aplicações onde o GIL é um gargalo, digamos em certos cenários multicore, o IronPython tem uma vantagem sobre o Python.NET.
Da documentação do Python.NET:
Nota importante para incorporadores: Python não é free-threaded e usa um bloqueio de interpretador global para permitir que aplicativos multi-threaded interajam com segurança com o interpretador Python. Muito mais informações sobre isso estão disponíveis na documentação da API Python C no
www.python.org
site.
Ao incorporar Python em um aplicativo gerenciado, você deve gerenciar o GIL da mesma forma que faria ao incorporar Python em um aplicativo C ou C ++.
Antes de interagir com qualquer um dos objetos ou APIs fornecidos pelo
Python.Runtime
namespace, o código de chamada deve ter adquirido o bloqueio do interpretador global Python chamando o
PythonEngine.AcquireLock
método. A única exceção a esta regra é o
PythonEngine.Initialize
método, que pode ser chamado na inicialização sem ter adquirido o GIL.
Quando terminar de usar as APIs do Python, o código gerenciado deve chamar um correspondente
PythonEngine.ReleaseLock
para liberar o GIL e permitir que outros threads usem o Python.
Os
métodos AcquireLock
e ReleaseLock
são thin wrappers sobre as funções PyGILState_Ensure
e
não gerenciadas PyGILState_Release
da API Python, e a documentação dessas APIs se aplica às versões gerenciadas.
Outro problema é o suporte IDE. CPython provavelmente tem um suporte IDE melhor no momento do que IronPython - então isso pode ser um fator na escolha de um ou outro.