.NET/C#与Python互操作

amc*_*dnl 6 .net c# python interop protocol-buffers

我的后端是用.NET/C#编写的,我要求我需要执行python脚本从房子的.net端传递上下文.这些在作为Windows服务运行的名为hangfire的后台任务引擎中排队.

我做了一点挖掘并找到了IronPython,然而,在实现之后它无法支持我需要在我的脚本中执行的许多pypi python包.

其次,我查看了Python.Net,这是一个嵌入或扩展CPython的嵌入式解释器.CPython可以运行我需要的所有脚本/等等,但是,我发现一直打开/关闭python解释器会产生很多内存泄漏,并且总是存在线程约束.有关详细信息,请参阅文档.

我想知道在.net中嵌入和嵌入python是否是一个好主意.我想知道是否使用像celery这样的东西使python成为自己的执行引擎,并使用protobufs之类的东西编组数据会是更好的解决方案吗?这也为我的堆栈增加了更多的复杂性和额外的任务引擎.

我想知道是否有其他人有任何想法/反馈/经验试图完成类似的事情?谢谢!

den*_*ufa 6

我认为 pythonnet 是你最好的选择:

  1. 嵌入式 Python 解释器与 Python 子解释器不同。子解释器的使用要少得多,而 CPython 已嵌入到主要应用程序中。此外,由于 pythonnet 为您处理了这一点,内存泄漏应该是不太可能的。
  2. 嵌入式解释器不必在调用之间关闭 - 实际上这可能会变得非常昂贵,只要您的应用程序处于活动状态,您就可以保持它的持久性。
  3. 如果包含需要GILwithusing (Py.GIL()) {}块的代码,则可以避免线程问题。
  4. 使用 PTVS 在混合模式下调试 CPython/.NET 代码的额外好处。