[go: up one dir, main page]

Struct pyo3::sync::GILProtected

source ·
pub struct GILProtected<T> { /* private fields */ }
Expand description

Value with concurrent access protected by the GIL.

This is a synchronization primitive based on Python’s global interpreter lock (GIL). It ensures that only one thread at a time can access the inner value via shared references. It can be combined with interior mutability to obtain mutable references.

Example

Combining GILProtected with RefCell enables mutable access to static data:

use pyo3::sync::GILProtected;
use std::cell::RefCell;

static NUMBERS: GILProtected<RefCell<Vec<i32>>> = GILProtected::new(RefCell::new(Vec::new()));

Python::with_gil(|py| {
    NUMBERS.get(py).borrow_mut().push(42);
});

Implementations§

source§

impl<T> GILProtected<T>

source

pub const fn new(value: T) -> Self

Place the given value under the protection of the GIL.

source

pub fn get<'py>(&'py self, _py: Python<'py>) -> &'py T

Gain access to the inner value by giving proof of having acquired the GIL.

Trait Implementations§

source§

impl<T> Sync for GILProtected<T>where T: Send,

Auto Trait Implementations§

§

impl<T> RefUnwindSafe for GILProtected<T>where T: RefUnwindSafe,

§

impl<T> Send for GILProtected<T>where T: Send,

§

impl<T> Unpin for GILProtected<T>where T: Unpin,

§

impl<T> UnwindSafe for GILProtected<T>where T: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> Ungil for Twhere T: Send,