Python.NET:Py.GIL 线程在 ASP.NET Core Razor 页面中加载需要很长时间

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

如标题所述

出现“On get”输出语句,但“到达此处行”需要很长时间才能出现在剃刀页面之一中

// Index.cs.html.cs
    public void OnGet() {
        Console.WriteLine("On get");
        using (Py.GIL()) {
            Console.WriteLine("Reached line here");
        }
    }

对于上下文,我通过命令 - dotnet new webapp 从模板中获取了 razor 页面

在运行应用程序之前,我在主(Program.cs)文件中全局初始化PythonEngine

PythonEngine.Initialize();

当我在同一个文件或任何不是 .cshtml.cs razor 页面的 .cs 文件中使用 Py.GIL 线程时,它似乎会立即运行

例如,如果我这样做,线程会立即加载到 Resources.cs 文件中

// Program.cs
using Python.Runtime;
class Program {
    static void Main(string[] args) {
        Runtime.PythonDLL = "/Library/Frameworks/Python.framework/Versions/3.12/bin/python3";
        PythonEngine.Initialize();
        Resources.initResources();
...
}
   

// Resources.cs
static class Resources {
    public static void initResources() {
        using (Py.GIL()) {
            Console.WriteLine("Reached line here"); // printed instantly
            ...
        }
        Console.WriteLine("Thread ends here"); // printed and thread ended successfully
        ...
    }
}

但是当我尝试在 Razor 页面中使用 Py.GIL 线程时,它不会加载。我可以让它工作的唯一方法是,如果我关闭 PythonEngine,然后每次使用 Py.GIL() 线程时再次重新启动 PythonEngine。

关机代码如下:

PythonEngine.Shutdown();

asp.net asp.net-core razor-pages python.net
1个回答
0
投票

我找到了一个有效的解决方案 https://github.com/pythonnet/pythonnet/issues/1587

不知道为什么它会起作用,因为我的代码应该只在一个线程上运行

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