加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

c# – 如何在使用(Py.GIL())块pythonnet时处理异常

发布时间:2020-12-16 22:42:28 所属栏目:Python 来源:网络整理
导读:有没有办法在使用(Py.GIL())块时处理异常? 例如: using System; using Python.Runtime; public class Test{ public static void Main(){ using(Py.GIL()){ try{ dynamic module = Py.Import("module"); dynamic result = module.function("argument"); Con

有没有办法在使用(Py.GIL())块时处理异常?

例如:

   using System;
   using Python.Runtime;

   public class Test{
        public static void Main(){
           using(Py.GIL()){
               try{
                   dynamic module = Py.Import("module");
                   dynamic result = module.function("argument");

                   Console.WriteLine(result);
               }
               catch(Excepiton ex){
                   // Handled Exception
               }
           }
        }
    }

我问这个问题因为,我调用C#函数使用(Py.GIL())块.它使用主线程等待完成的新线程执行.它适用于第一轮,但是对于下一轮,它停在使用块上,应用程序冻结而不显示任何异常.

我甚至试图阻止主线程等待执行,但所有工作线程执行仍然在第一轮之后停止在Py.GIL()的使用块.

对于线程执行我正在使用线程池.

Thread.Factory.StartNew(FunctionName);
最佳答案
这个问题是由于Python如何处理线程.
主线程必须初始化Python引擎和允许线程.

PythonEngine.Initialize();
PythonEngine.BeginAllowThreads();

在使用使用(Py.GIL())块的工作线程之前,在主线程上运行上面的代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读