相关文章推荐
直爽的机器人  ·  DataGridView.CancelEdi ...·  1 年前    · 
才高八斗的豆浆  ·  当EPOLLRDHUP发生时,Linux异步 ...·  2 年前    · 
面冷心慈的酱牛肉  ·  使用JSONObject时,你需要注意避免的 ...·  2 年前    · 
爱看球的书包  ·  mono 内存分析 - OSCHINA - ...·  2 年前    · 
坐怀不乱的钥匙扣  ·  Electron(1) - 快速入门 - ...·  2 年前    · 
Code  ›  在Pythonnet中,BeginAllowThreads在从Python调用C#对象时崩溃。开发者社区
python 脚本 线程
https://cloud.tencent.com/developer/ask/sof/107057630
爽快的四季豆
1 年前
首页
学习
活动
专区
工具
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:
 
推荐文章
直爽的机器人  ·  DataGridView.CancelEdit 方法 (System.Windows.Forms) | Microsoft Learn
1 年前
才高八斗的豆浆  ·  当EPOLLRDHUP发生时,Linux异步epoll()服务器有问题。
2 年前
面冷心慈的酱牛肉  ·  使用JSONObject时,你需要注意避免的一个问题-51CTO.COM
2 年前
爱看球的书包  ·  mono 内存分析 - OSCHINA - 中文开源技术交流社区
2 年前
坐怀不乱的钥匙扣  ·  Electron(1) - 快速入门 - ---空白--- - 博客园
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号