相关文章推荐
爱吹牛的香烟  ·  MATLAB生成M序列和Gold序列_m序列 ...·  11 月前    · 
怕考试的熊猫  ·  在Docker中,如何查看镜像支持的环境变量 ...·  1 年前    · 
另类的滑板  ·  扩散模型与受控图像生成-脉络梳理 - 知乎·  2 年前    · 
温柔的煎鸡蛋  ·  Nginx出现500 Internal ...·  2 年前    · 
Code  ›  在Pythonnet中,BeginAllowThreads在从Python调用C#对象时崩溃。开发者社区
python 脚本 线程
https://cloud.tencent.com/developer/ask/sof/107057630
爽快的四季豆
2 年前
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
提问

问 在Pythonnet中,BeginAllowThreads在从Python调用C#对象时崩溃。

Stack Overflow用户
提问于 2022-06-19 11:51:24
EN

使用Pythonnet,我从Python脚本中对CLR对象调用一个长时间运行的方法。我希望使用BeginAllowThreads来允许其他线程获得GIL,如下所述: Pythonnet线程 。

但是,对BeginAllowThreads的调用使整个应用程序崩溃,出现“无线程状态”错误。调用线程是一个CLR工作线程,具有GIL,所以我认为它应该有一个线程状态。

下面是代码序列的摘要:

// In the main thread Pythonnet is initialised like this:
public void Initialise() 
    PythonEngine.Initialize();
    m_outerScope = Py.CreateScope( "outerscope" )
    m_mainThreadState = PythonEngine.BeginAllowThreads();
// A python script is run on a worker thread like this. 
// pyObj is a CLR object with methods the script can call, created 
// with clrobj.ToPython():
void runScript( string script, PyObject pyObj, string objName)
    using( Py.GIL() ) {
        using( PyScope scope = m_outerScope.NewScope() ) {
            try {
                scope.Set( objName, pyObj );
                scope.Exec( script );
            } catch( Exception exc ) {
// Within the Python script we have something like:
objName.SomeMethod( 'message')
// The callback method on the CLR object looks like:
 
推荐文章
爱吹牛的香烟  ·  MATLAB生成M序列和Gold序列_m序列优选对-CSDN博客
11 月前
怕考试的熊猫  ·  在Docker中,如何查看镜像支持的环境变量? - 黄嘉波 - 博客园
1 年前
另类的滑板  ·  扩散模型与受控图像生成-脉络梳理 - 知乎
2 年前
温柔的煎鸡蛋  ·  Nginx出现500 Internal Server Error 错误的解决方案-腾讯云开发者社区-腾讯云
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号