#pragma once #include"cstring" #include #include #include #include #include #include "Python.h" #include /*全局解释和线程锁*/ class PyGILThreadLock { public: PyGILThreadLock() { _save = NULL; nStatus = 0; nStatus = PyGILState_Check(); //检测当前线程是否拥有GIL //PyGILState_STATE gstate; if (!nStatus) { cout << "申请获取GIL" << endl; gstate = PyGILState_Ensure(); //如果没有GIL,则申请获取GIL nStatus = 1; } _save = PyEval_SaveThread(); PyEval_RestoreThread(_save); } ~PyGILThreadLock() { _save = PyEval_SaveThread(); PyEval_RestoreThread(_save); if (nStatus) { cout << "释放当前线程的GIL" << endl; PyGILState_Release(gstate); //释放当前线程的GIL } } private: PyGILState_STATE gstate; PyThreadState *_save; int nStatus; };