如标题所述
出现“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();
我找到了一个有效的解决方案 https://github.com/pythonnet/pythonnet/issues/1587
不知道为什么它会起作用,因为我的代码应该只在一个线程上运行