7#ifndef PXR_BASE_TF_PY_LOCK_H
8#define PXR_BASE_TF_PY_LOCK_H
12#ifdef PXR_PYTHON_SUPPORT_ENABLED
16#include "pxr/base/tf/api.h"
18PXR_NAMESPACE_OPEN_SCOPE
130 friend struct TfPyEnsureGILUnlockedObj;
131 enum _UnlockedTag { _ConstructUnlocked };
134 PyGILState_STATE _gilState;
135 PyThreadState *_savedState;
137 bool _allowingThreads:1;
141struct TfPyEnsureGILUnlockedObj
145 TF_API TfPyEnsureGILUnlockedObj();
173#define TF_PY_ALLOW_THREADS_IN_SCOPE() \
174 TfPyEnsureGILUnlockedObj __py_lock_allow_threads__
176PXR_NAMESPACE_CLOSE_SCOPE
181#define TF_PY_ALLOW_THREADS_IN_SCOPE()
Convenience class for accessing the Python Global Interpreter Lock.
TF_API ~TfPyLock()
Releases Python GIL and restores prior threads state.
TF_API void BeginAllowThreads()
Unlock the GIL temporarily to allow other threads to use python.
TF_API TfPyLock()
Acquires the Python GIL and swaps in callers thread state.
TF_API void EndAllowThreads()
End allowing other threads, reacquiring the lock state.
TF_API void Acquire()
(Re)acquires GIL and thread state, if previously released.
TF_API void Release()
Explicitly releases GIL and thread state.
Intended to replace a direct include of Python.h, which causes several build problems with certain co...