pub struct ContextWatcherGuard {
watcher_id: c_int,
active: bool,
}Py_3_14 and neither GraalPy nor Py_LIMITED_API nor PyPy nor RustPython and non-Py_GIL_DISABLED only.Expand description
An unbound guard which keeps a context watcher registered.
Unlike BoundContextWatcherGuard, this guard is not tied to a particular Python
attachment, so it can be stored outside that attachment or sent to another thread.
Dropping this guard automatically attaches to Python to remove the watcher. Use
clear to remove it with an existing attachment and observe any error returned by
CPython, or into_bound to recover a bound guard.
If Python cannot be attached during drop, the watcher remains registered. This does not create a
dangling function pointer because watch_callback! creates a static, monomorphized trampoline.
§Example
use pyo3::prelude::*;
use pyo3::types::context::{watch_callback, ContextEvent};
use pyo3::types::PyContext;
fn context_changed(
_py: Python<'_>,
_event: ContextEvent<'_, '_>,
) -> PyResult<()> {
Ok(())
}
let watcher = Python::attach(|py| -> PyResult<_> {
Ok(PyContext::add_watcher(py, watch_callback!(context_changed))?.unbind())
})?;
// The guard can be stored until an attachment is available for explicit cleanup.
Python::attach(|py| watcher.clear(py))Fields§
§watcher_id: c_int§active: boolImplementations§
Source§impl ContextWatcherGuard
impl ContextWatcherGuard
Sourcepub fn clear(self, py: Python<'_>) -> PyResult<()>
pub fn clear(self, py: Python<'_>) -> PyResult<()>
Removes this watcher from the current Python interpreter.
Dropping the guard also removes the watcher, but cannot report a failure to the caller.
Sourcepub fn into_bound<'py>(self, py: Python<'py>) -> BoundContextWatcherGuard<'py>
pub fn into_bound<'py>(self, py: Python<'py>) -> BoundContextWatcherGuard<'py>
Connects this guard to the given Python attachment.
PyO3 does not currently support using a module from multiple interpreters, so py is the
attachment for the interpreter in which this watcher was registered.
Trait Implementations§
Source§impl Drop for ContextWatcherGuard
impl Drop for ContextWatcherGuard
Auto Trait Implementations§
impl Freeze for ContextWatcherGuard
impl RefUnwindSafe for ContextWatcherGuard
impl Send for ContextWatcherGuard
impl Sync for ContextWatcherGuard
impl Unpin for ContextWatcherGuard
impl UnsafeUnpin for ContextWatcherGuard
impl UnwindSafe for ContextWatcherGuard
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> SizeHint for Twhere
T: ?Sized,
impl<T> SizeHint for Twhere
T: ?Sized,
Source§default fn lower_bound(&self) -> usize
default fn lower_bound(&self) -> usize
core_io_internals)[u8; 12] could return any value between 0 and
12 inclusively as a correct implementation. Read moreSource§impl<T> SizedTypeProperties for T
impl<T> SizedTypeProperties for T
Source§#[doc(hidden)]const SIZE: usize = _
#[doc(hidden)]const SIZE: usize = _
sized_type_properties)Source§#[doc(hidden)]const ALIGN: usize = _
#[doc(hidden)]const ALIGN: usize = _
sized_type_properties)Source§#[doc(hidden)]const ALIGNMENT: Alignment = _
#[doc(hidden)]const ALIGNMENT: Alignment = _
ptr_alignment_type)Source§#[doc(hidden)]const IS_ZST: bool = _
#[doc(hidden)]const IS_ZST: bool = _
sized_type_properties)Source§#[doc(hidden)]const LAYOUT: Layout = _
#[doc(hidden)]const LAYOUT: Layout = _
sized_type_properties)Source§#[doc(hidden)]const MAX_SLICE_LEN: usize = _
#[doc(hidden)]const MAX_SLICE_LEN: usize = _
sized_type_properties)[Self]. Read more