栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用Python和C API进行多线程

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Python和C API进行多线程

执行您要执行的操作的正确步骤顺序是:

  • 在主线程中:

    1. 使用初始化Python
      Py_Initialize*
    2. 使用初始化Python线程支持
      Pyeval_InitThreads()
    3. 启动C ++线程。

此时,主线程仍然保留GIL。

  • 在C ++线程中:
    1. 使用获取GIL
      PyGILState_Ensure()
    2. 创建一个新的Python线程对象并启动它。
    3. 使用释放GIL
      PyGILState_Release()
    4. 睡眠,做一些有用的事情或退出线程。

因为主线程持有GIL,所以该线程将等待获取GIL。如果主线程调用Python API,则它可能会不时释放GIL,从而允许Python线程执行一会儿。

  • 回到主线程:
    1. 释放GIL,使线程可以使用
      Pyeval_SaveThread()
    2. 在尝试使用其他Python调用之前,请使用重新获取GIL
      Pyeval_RestoreThread()

我怀疑您错过了最后一步-在主线程中释放GIL,从而允许Python线程执行。

我有一个小而完整的示例,该示例正是在此链接上进行的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/625126.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号