从 C# 运行多进程 python 模块

问题描述 投票:0回答:1

多进程自定义Python模块(“area.py”)

我有一个自定义 python 模块,它使用多进程 python 库在多核上运行 CPU 密集型任务。该函数还有一些 numpy 和 scipy 库用于计算梯形或辛普森法则。

主要 C# 应用程序**

我必须从 C# (.NET Framework 4.8) 调用 python 模块,我正在寻找选项并按优先顺序想到了 3 个可能的选项。

pythonnet

  • 支持Python并受到.NET基金会推荐,因此这是我的第一选择。

  • 但是看起来他们不支持多进程,因为他们使用下面示例中的 GIL 锁 - GitHub

  • 我的伪代码写在下面。当我运行多进程“area.py”文件时,我的系统崩溃了,如果没有启用 Py.GIL() 语句,我就无法运行,因为这会引发内存保护错误。

static void Main(string[] args)
{
    PythonEngine.Initialize();
    using (Py.GIL())
    {
        var script= Py.Import("area");
        script.InvokeMethod("area");

    }
}
  • 有没有办法使用 pythonnet 运行多进程 py 模块?

铁蟒

  • 下一个选择是使用 IronPython,它也支持多线程,但我看到大多数文章建议避免这种情况,因为这可能很快就会过时,而且更新很慢。 (仍然停留在 python 3.4)。

可执行文件

  • 我的最后一种方法是将area.py 文件作为可执行文件而不是.py 模块运行,或者将现有的python 模块转换为C#。

下一步

  • 到目前为止我已经尝试过Pythonnet选项。
  • 它在单进程 python 模块中运行良好,但在多进程 python 模块文件中运行失败。
  • 在这种情况下最好的选择是什么?
c# python-3.x .net multiprocessing python.net
1个回答
0
投票

嗨,帕万苏塔·霍萨格拉哈拉·达克辛 您是否能够找到问题的解决方案? 我有同样的问题。 您最终将 python 代码移植到 c# 了吗?

© www.soinside.com 2019 - 2024. All rights reserved.