gpt4 book ai didi

c# - .NET/C# 与 Python 互操作

转载 作者:太空狗 更新时间:2023-10-30 00:10:09 25 4
gpt4 key购买 nike

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

我做了一点挖掘,发现 IronPython ,但是,在实现后它无法支持我需要在我的脚本中执行的许多 pypi python 包。

其次,我查看了Python.Net这是一个嵌入或扩展 CPython 的嵌入式解释器。 CPython 可以运行我需要的所有脚本/等等,但是,我发现一直打开/关闭 python 解释器会造成相当多的内存泄漏,并且那里也总是存在线程限制。参见 docs一些细节。

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

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

最佳答案

我认为 pythonnet 是您的最佳选择:

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

关于c# - .NET/C# 与 Python 互操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34662448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com