我正在使用SWIG将第 3 方 C++ 包集成到 python 应用程序。该软件包通过网络连接到专有 API 并接收更新。整个流程是 python 实例化一个 C++ 对象,调用它的函数来设置它,然后等待更新。
我使用SWIG 的导向器功能实现了更新的回调机制,并且在从 python 或从 python 调用的 C++ 函数进行测试时,它运行良好。也就是说,我能够在 Python 中继承一个 C++ 类,从 C++ 调用它的虚函数,然后查看 Python 代码优先执行。
问题:
当我收到来自网络的更新时,我得到:
The thread 'Win32 Thread' (0x1f78) has exited with code 0 (0x0).
Unhandled exception at 0x1e0650cb in python.exe: 0xC0000005: Access violation writing location 0x0000000c.
python27.dll
调用回调函数时从内部抛出此异常。
我的怀疑是: 我违反了GIL
AFAIU,更新来自不同的线程并使用该线程调用 python 的代码。
在这一点上,我不知所措。SWIG 的导向器功能是否仅限于在 python 中启动的流(即来自 python 托管线程)?
我该如何规避这个?如何诱导从 C++ 到 python 的更新?甚至可以使用 SWIG 吗?
我应该使用完全不同的方法吗?
我愿意就此事提出任何建议......