我正在尝试编写一个 C++ 类,该类调用一次执行一些 I/O 操作(文件、标准输出)的类的 Python 方法。我遇到的问题是我的类是从不同的线程调用的:有时是主线程,有时是不同的其他线程。显然,我尝试将这种方法应用于多线程本机应用程序中的 Python 调用。基本上一切都从 PyEval_AcquireLock 和 PyEval_ReleaseLock 或只是全局锁开始。根据此处的文档,当线程已被锁定时,就会发生死锁。当从主线程或其他阻止 Python 执行的线程调用我的类时,我遇到了死锁。
Python> Cfunc1() - C++ 函数在内部创建线程,导致在“我的类”中调用,它卡在 PyEval_AcquireLock 上,显然 Python 已经被锁定,即等待 C++ Cfunc1 调用完成......如果我完成就好了省略那些锁。当 Python 解释器准备好下一个用户命令时,它也可以正常完成,即当线程在后台调用 funcs 时 - 而不是在本机调用内部
我正在寻找一种解决方法。我需要区分是否允许全局锁定,即 Python 未锁定并准备好接收下一个命令...我尝试了 PyGIL_Ensure,不幸的是我看到挂起。
任何已知的 API 或解决方案?
(Python 2.4)