diff options
author | Paul David <paul.david@ettus.com> | 2017-05-02 14:10:05 -0400 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2018-06-20 19:02:32 -0500 |
commit | e74cf7635ba3360b5b7002a2f7317941f65ffa16 (patch) | |
tree | 46b63039f31c5aedf26773b4b626b2a7932999db /host/lib/utils/gil_release_python.hpp | |
parent | 22e24497a510c174e6de7718ad918a423d1973dd (diff) | |
download | uhd-e74cf7635ba3360b5b7002a2f7317941f65ffa16.tar.gz uhd-e74cf7635ba3360b5b7002a2f7317941f65ffa16.tar.bz2 uhd-e74cf7635ba3360b5b7002a2f7317941f65ffa16.zip |
python: Separating exposed Python data structures
- Separating exposed Python data structures into logical sections
- Exposes all of the multi_usrp API
- Adds a layer of Python for documentation and adding helper methods
- Adds improvements and fixes to the MultiUSRP object
- Includes additional exposed data structures (like time_spec_t, etc.)
- Add code to release the Python GIL during long C++ calls
Diffstat (limited to 'host/lib/utils/gil_release_python.hpp')
-rw-r--r-- | host/lib/utils/gil_release_python.hpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/host/lib/utils/gil_release_python.hpp b/host/lib/utils/gil_release_python.hpp new file mode 100644 index 000000000..287ba240e --- /dev/null +++ b/host/lib/utils/gil_release_python.hpp @@ -0,0 +1,31 @@ +// +// Copyright 2018 Ettus Research, a National Instruments Company +// +// SPDX-License-Identifier: GPL-3.0-or-later +// + +//! RAII-style GIL release method +// +// To release the GIL using this method, simply instantiate this class in the +// scope that needs to release the GIL. +// +// Note that using this class assumes that threads have already been +// initialized. See also https://docs.python.org/3.5/c-api/init.html for more +// documentation on Python initialization and threads. +class scoped_gil_release +{ +public: + inline scoped_gil_release() + { + _thread_state = PyEval_SaveThread(); + } + + inline ~scoped_gil_release() + { + PyEval_RestoreThread(_thread_state); + _thread_state = nullptr; + } + +private: + PyThreadState* _thread_state; +}; |