gpt4 book ai didi

python - PyEval_InitThreads 什么时候被调用?

转载 作者:太空狗 更新时间:2023-10-30 01:23:17 24 4
gpt4 key购买 nike

<分区>

我对什么时候应该调用 PyEval_InitThreads 有点困惑。一般来说,我知道只要使用非 Python 线程(即在扩展模块中生成的线程),就必须调用 PyEval_InitThreads

但是,我很困惑 PyEval_InitThreads 是用于嵌入 Python 解释器的 C 程序,还是用于导入 C 扩展模块的 Python 程序,或者两者兼而有之。

那么,如果我编写一个将在内部启动线程的 C 扩展模块,我是否需要在初始化模块时调用 PyEval_InitThreads

此外,PyEval_InitThreads implicitly acquires the Global Interpreter Lock .因此,在调用 PyEval_InitThreads 之后,大概 GIL 必须被释放,否则就会发生死锁。那么如何释放锁呢?阅读文档后,PyEval_ReleaseLock()似乎是释放GIL的方式。但是,实际上,如果我在 C 扩展模块中使用以下代码:

   PyEval_InitThreads();
PyEval_ReleaseLock();

...然后在运行时 Python 中止:

Fatal Python error: drop_gil: GIL is not locked

那么用PyEval_InitThreads获取GIL后如何释放呢?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com