Trong khi đồng ý với các câu trả lời của Reed Copsey và Alex Martelli, tôi muốn chỉ ra một điểm khác biệt nữa - Khóa phiên dịch toàn cầu (GIL). Mặc dù IronPython không có những hạn chế của GIL, nhưng CPython thì có - vì vậy có vẻ như đối với những ứng dụng mà GIL là nút cổ chai, chẳng hạn như trong một số tình huống đa lõi, IronPython có lợi thế hơn Python.NET.
Từ tài liệu Python.NET:
Lưu ý quan trọng đối với trình nhúng: Python không phân luồng tự do và sử dụng khóa thông dịch toàn cục để cho phép các ứng dụng đa luồng tương tác an toàn với trình thông dịch Python. Nhiều thông tin hơn về điều này có sẵn trong tài liệu API Python C trên
www.python.org
Trang web.
Khi nhúng Python vào một ứng dụng được quản lý, bạn phải quản lý GIL giống như cách bạn làm khi nhúng Python vào ứng dụng C hoặc C ++.
Trước khi tương tác với bất kỳ đối tượng hoặc API nào được cung cấp bởi
Python.Runtime
không gian tên, mã gọi phải có được khóa thông dịch toàn cầu Python bằng cách gọi
PythonEngine.AcquireLock
phương thức. Ngoại lệ duy nhất cho quy tắc này là
PythonEngine.Initialize
phương thức, có thể được gọi khi khởi động mà không cần lấy GIL.
Khi hoàn tất việc sử dụng các API Python, mã được quản lý phải gọi một mã tương ứng
PythonEngine.ReleaseLock
để giải phóng GIL và cho phép các luồng khác sử dụng Python.
Các AcquireLock
và ReleaseLock
phương thức là những trình bao bọc mỏng đối với các chức năng PyGILState_Ensure
và
không được quản lý PyGILState_Release
từ API Python và tài liệu cho các API đó áp dụng cho các phiên bản được quản lý.
Một vấn đề khác là hỗ trợ IDE. Hiện tại CPython có thể hỗ trợ IDE tốt hơn IronPython - vì vậy đây có thể là một yếu tố trong việc lựa chọn cái này hơn cái kia.