首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >IronPython与Python .NET

IronPython与Python .NET
EN

Stack Overflow用户
提问于 2009-07-23 00:06:00
回答 10查看 70.3K关注 0票数 91

我想从Python代码访问一些用C#编写的.NET程序集。

一项小小的研究表明我有两个选择:

具有.NET接口功能的

两种解决方案之间的权衡是什么?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2009-07-23 00:12:09

如果你想让你的代码主要基于.NET框架,我强烈推荐IronPython和Python.NET。IronPython几乎是原生的.NET -所以它在与其他.NET语言集成时工作得很好。

如果您只想将.NET中的一两个组件集成到标准的python应用程序中,那么Python.NET是很好的选择。

在使用IronPython时有一些显著的区别--但大多数都是相当微妙的。Python.NET使用标准的CPython运行时,因此this Wiki page是两种实现之间差异的相关讨论。最大的差异出现在异常的成本上-因此,由于其实现的原因,一些标准的python库在IronPython中不能很好地执行。

票数 73
EN

Stack Overflow用户

发布于 2009-07-23 00:20:06

在同意Reed Copsey和Alex Martelli给出的答案的同时,我想指出另一个不同之处--全局解释器锁(GIL)。虽然IronPython没有GIL的限制,但CPython有-所以对于那些GIL是瓶颈的应用程序来说,比如说在某些多核场景中,IronPython比Python.NET更有优势。

从Python.NET文档中:

Python对嵌入者的重要说明: Python不是自由线程的,它使用全局解释器锁来允许多线程应用程序与

解释器安全地交互。有关这方面的更多信息,请参阅www.python.org网站上的Python C API文档。

在托管应用程序中嵌入Python时,您必须以与在C或C++应用程序中嵌入Python时相同的方式来管理GIL。

在与Python.Runtime名称空间提供的任何对象或API交互之前,调用代码必须已经通过调用PythonEngine.AcquireLock方法获得了Python全局解释器锁。此规则的唯一例外是PythonEngine.Initialize方法,该方法可以在启动时调用,而无需获取GIL。

使用完Python后,托管代码必须调用相应的PythonEngine.ReleaseLock来释放GIL并允许其他线程使用Python。

AcquireLockReleaseLock方法是Python API中非托管PyGILState_EnsurePyGILState_Release函数的薄包装器,这些API的文档适用于托管版本。

另一个问题是IDE支持。目前CPython可能比IronPython有更好的集成开发环境支持--所以这可能是选择其中一个的一个因素。

票数 30
EN

Stack Overflow用户

发布于 2014-10-06 22:14:17

大多数科学和数值Python库依赖于CPython C-API (numpy、scipy、matplotlib、pandas、cython等)。主要在CPython下工作,所以在这种情况下,你最好的选择是pythonnet (其他名称- Python.NET和.NET的Python )。WxWidgets、PyQt/PySide、GTK、Kivy等CPython图形用户界面绑定也是如此,尽管pythonnet和IronPython都可以使用WPF和WinForms。

最后,IronPython还不完全支持Python3。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1168914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档