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, 👎 Deprecated since 0.15.0:
Use pyo3_asyncio::async_std::local_future_into_py_with_locals instead
Expand description
Convert a !Send Rust Future into a Python awaitable
This function will be removed in v0.16
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;
Ok(Python::with_gil(|py| 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(())
}