.NET/C#到Python的互操作
本文关键字:互操作 Python NET | 更新日期: 2023-09-27 18:29:20
我的后端是用.NET/C#编写的,我有一个要求,我需要执行从房子的.NET端传递上下文的python脚本。它们在作为windows服务运行的名为hangfire的后台任务引擎中排队。
我做了一点挖掘,发现了IronPython,然而,在实现它之后,它无法支持我需要在脚本中执行的许多pypi python包。
其次,我研究了Python.Net,它是一个嵌入或扩展CPython的嵌入式解释器。CPython可以运行我需要的所有脚本等,但是,我发现一直打开/关闭python解释器会造成相当多的内存泄漏,而且总是存在线程约束。有关一些详细信息,请参阅文档。
我想知道这种在.net中嵌入python的互操作是否是个好主意。我想知道使用芹菜之类的东西让python成为自己的执行引擎,并使用protobufs之类的东西在两者之间编组数据是否是更好的解决方案?这给我的堆栈增加了更多的复杂性和额外的任务引擎。
我想知道是否还有其他人有任何想法/反馈/经验试图完成类似的事情?谢谢
我认为蟒蛇网是你最好的选择:
- 嵌入式Python解释器与Python子解释器不同。子解释器的使用要少得多,而CPython已经嵌入到主要的应用程序中。此外,内存泄漏的可能性应该很小,因为pythonnet会帮你解决这个问题
- 嵌入式解释器不必在调用之间关闭——事实上,这可能会非常昂贵,只要应用程序处于活动状态,就可以保持它的持久性
- 如果将需要
GIL
的代码包含在using (Py.GIL()) {}
块中,则可以避免线程问题 - 在混合模式下使用调试CPython/.NET代码的额外好处PTVS