Function pyo3_asyncio::async_std::local_future_into_py_with_loop [−][src]
pub fn local_future_into_py_with_loop<F>(
event_loop: &PyAny,
fut: F
) -> PyResult<&PyAny> where
F: Future<Output = PyResult<PyObject>> + 'static,
Expand description
Convert a !Send
Rust Future into a Python awaitable
Arguments
event_loop
- The Python event loop that the awaitable should be attached tofut
- The Rust future to be converted
Examples
use std::{rc::Rc, time::Duration}; use pyo3::prelude::*; /// Awaitable non-send sleep function #[pyfunction] fn sleep_for(py: Python, secs: u64) -> PyResult<&PyAny> { // Rc is non-send so it cannot be passed into pyo3_asyncio::async_std::future_into_py let secs = Rc::new(secs); Ok(pyo3_asyncio::async_std::local_future_into_py_with_loop( pyo3_asyncio::async_std::get_current_loop(py)?, async move { async_std::task::sleep(Duration::from_secs(*secs)).await; Python::with_gil(|py| Ok(py.None())) } )?.into()) } #[pyo3_asyncio::async_std::main] async fn main() -> PyResult<()> { Python::with_gil(|py| { let py_future = sleep_for(py, 1)?; pyo3_asyncio::async_std::into_future(py_future) })? .await?; Ok(()) }