我正在包装一个执行阻塞操作(选择)然后处理传入消息的 C 函数。我的理解是,当 C 函数要阻塞时,在允许其他线程运行的同时调用它的正确方法是:
Py_BEGIN_ALLOW_THREADS
blocking_function();
Py_END_ALLOW_THREADS
但是,这个函数碰巧将回调指针作为参数。在处理由 C 函数预处理的传入消息时调用此回调。我已经成功地将这个回调包装在一个调用的函数中PyEval_CallObject()
,允许我向它传递一个 Python 回调。
现在我正在添加线程支持,我想知道是否可以同时:
- 在调用此阻塞操作之前释放 GIL。
- 让这个阻塞操作安全地回调到 python 解释器中。
这会引起问题吗?如果是这样,有没有办法解决它?
谢谢。