py_gil.h 490 B

12345678910111213141516171819202122232425262728293031323334353637
  1. #pragma once
  2. #include <Python.h>
  3. namespace NPython {
  4. struct TPyGilLocker
  5. {
  6. TPyGilLocker()
  7. : Gil(PyGILState_Ensure())
  8. {
  9. }
  10. ~TPyGilLocker() {
  11. PyGILState_Release(Gil);
  12. }
  13. private:
  14. PyGILState_STATE Gil;
  15. };
  16. struct TPyGilUnlocker {
  17. TPyGilUnlocker()
  18. : ThreadState(PyEval_SaveThread())
  19. {
  20. }
  21. ~TPyGilUnlocker() {
  22. PyEval_RestoreThread(ThreadState);
  23. }
  24. private:
  25. PyThreadState* ThreadState;
  26. };
  27. } // namespace NPython