1.问题描述
python在调用c++的Fint()函数时,等待c++的线程结束手动回收资源,而c++中处理线程在不断通过functional调用python里的回调函数,在python中有time.sleep()或者长时间任务时,容易产生死锁
2.问题原因
pybind11默认在python调用c++函数时一直持有GIL,即使其他线程在执行,也会被打断
3.解决方法
在python绑定c++函数时添加py::call_guardpy::gil_scoped_release(),意思是在python调用c++时自动释放GIL,确保其他线程的python可继续执行
pybind11关于回调函数死锁问题
最新推荐文章于 2024-05-23 16:54:17 发布