Структура Local Runtime
pub struct LocalRuntime { /* private fields */ }
rt.Локальная среда выполнения Tokio.
Эта среда выполнения может выполнять задачи, которые не являются Send + Sync, без использования LocalSet, а значит, поддерживает spawn_local без необходимости в контексте LocalSet.
Эту среду выполнения нельзя перемещать между потоками или запускать из разных потоков.
Эта среда выполнения несовместима с LocalSet. Не следует пытаться запустить LocalSet внутри LocalRuntime.
В настоящее время эта среда выполнения поддерживает один вариант, который внутри идентичен current_thread, за исключением упомянутых выше различий, связанных с spawn_local.
Общие сведения об использовании сред выполнения см. в документации модуля.
Реализации
impl LocalRuntime
pub fn new() -> Result<LocalRuntime>
Создаёт экземпляр локальной среды выполнения со значениями конфигурации по умолчанию.
При этом инициализируются планировщик, драйвер ввода-вывода и драйвер времени.
Если требуется более сложная конфигурация, можно использовать построитель среды выполнения.
Подробнее см. в документации на уровне модуля.
Примеры
Создание нового LocalRuntime со значениями конфигурации по умолчанию.
use tokio::runtime::LocalRuntime;
let rt = LocalRuntime::new()
.unwrap();
// Use the runtime...pub fn handle(&self) -> &Handle
Возвращает дескриптор планировщика задач среды выполнения.
Возвращённый дескриптор можно использовать для запуска задач в этой среде выполнения, а также клонировать, чтобы передавать Handle в другие потоки.
Поскольку дескриптор можно передавать в другие потоки, его можно использовать только для запуска задач, которые являются Send.
Вызов Handle::block_on для дескриптора LocalRuntime может привести к ошибкам. Подробнее см. документацию по Handle::block_on.
Примеры
use tokio::runtime::LocalRuntime;
let rt = LocalRuntime::new()
.unwrap();
let handle = rt.handle();
// Use the handle...pub fn spawn_local<F>(&self, future: F) -> JoinHandle<F::Output> ⓘ
Запускает задачу в среде выполнения.
Этот метод аналогичен методу spawn стандартной Runtime, но работает, даже если задача не является потокобезопасной.
Примеры
use tokio::runtime::LocalRuntime;
// Create the runtime
let rt = LocalRuntime::new().unwrap();
// Spawn a future onto the runtime
rt.spawn_local(async {
println!("now running on a worker thread");
});pub fn spawn_blocking<F, R>(&self, func: F) -> JoinHandle<R> ⓘ
Запускает переданную функцию в потоке из выделенного пула блокирующих потоков.
Эта функция будет выполняться в другом потоке.
Дополнительную информацию см. в документации для нелокальной среды выполнения.
Примеры
use tokio::runtime::LocalRuntime;
// Create the runtime
let rt = LocalRuntime::new().unwrap();
// Spawn a blocking function onto the runtime
rt.spawn_blocking(|| {
println!("now running on a worker thread");
});pub fn block_on<F: Future>(&self, future: F) -> F::Output
Выполняет future до завершения в среде выполнения Tokio. Это точка входа в среду выполнения.
Дополнительную информацию см. в документации по эквивалентному методу Runtime.
Примеры
use tokio::runtime::LocalRuntime;
// Create the runtime
let rt = LocalRuntime::new().unwrap();
// Execute the future, blocking the current thread until completion
rt.block_on(async {
println!("hello");
});pub fn enter(&self) -> EnterGuard<'_>
Входит в контекст среды выполнения.
Это позволяет создавать типы, для которых при создании требуется доступный исполнитель, например Sleep или TcpStream. Кроме того, это позволяет вызывать такие методы, как tokio::spawn.
Если это дескриптор LocalRuntime и вызов этой функции выполняется в том же потоке, в котором была создана среда выполнения, вы также сможете вызывать tokio::task::spawn_local.
Пример
use tokio::runtime::LocalRuntime;
use tokio::task::JoinHandle;
fn function_that_spawns(msg: String) -> JoinHandle<()> {
// Had we not used `rt.enter` below, this would panic.
tokio::spawn(async move {
println!("{}", msg);
})
}
fn main() {
let rt = LocalRuntime::new().unwrap();
let s = "Hello World!".to_string();
// By entering the context, we tie `tokio::spawn` to this executor.
let _guard = rt.enter();
let handle = function_that_spawns(s);
// Wait for the task before we end the test.
rt.block_on(handle).unwrap();
}pub fn shutdown_timeout(self, duration: Duration)
Завершает работу среды выполнения, ожидая не более duration, пока все запущенные задачи не остановятся.
Обратите внимание: по истечении времени ожидания могут остаться незавершёнными задачи spawn_blocking, и только задачи spawn_blocking.
Подробнее см. документацию на уровне структуры.
Примеры
use tokio::runtime::LocalRuntime;
use tokio::task;
use std::thread;
use std::time::Duration;
fn main() {
let runtime = LocalRuntime::new().unwrap();
runtime.block_on(async move {
task::spawn_blocking(move || {
thread::sleep(Duration::from_secs(10_000));
});
});
runtime.shutdown_timeout(Duration::from_millis(100));
}pub fn shutdown_background(self)
Завершает работу среды выполнения, не дожидаясь остановки запущенных задач.
Это может быть полезно, если вы хотите удалить среду выполнения из другой среды выполнения. Обычно удаление среды выполнения блокирует выполнение до завершения запущенных блокирующих задач, что, как правило, недопустимо в асинхронном контексте. Вызвав shutdown_background(), вы можете удалить среду выполнения из такого контекста.
Однако, поскольку мы не дожидаемся завершения блокирующих задач, это может привести к утечке ресурсов (блокирующие задачи продолжат выполняться до своего завершения). Другие задачи утекать не будут.
Подробнее см. документацию на уровне структуры.
Эта функция эквивалентна вызову shutdown_timeout(Duration::from_nanos(0)).
use tokio::runtime::LocalRuntime;
fn main() {
let runtime = LocalRuntime::new().unwrap();
runtime.block_on(async move {
let inner_runtime = LocalRuntime::new().unwrap();
// ...
inner_runtime.shutdown_background();
});
}pub fn metrics(&self) -> RuntimeMetrics
Возвращает представление, позволяющее получить информацию о производительности среды выполнения.
Реализации трейтов
impl Debug for LocalRuntime
impl Drop for LocalRuntime
impl RefUnwindSafe for LocalRuntime
impl UnwindSafe for LocalRuntime
Автоматические реализации трейтов
impl !Freeze for LocalRuntime
impl !Send for LocalRuntime
impl !Sync for LocalRuntime
impl Unpin for LocalRuntime
impl UnsafeUnpin for LocalRuntime
Общие реализации
impl<T> BorrowMut<T> for Twhere T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> Instrument for T
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
impl<T> WithSubscriber for T
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
Subscriber к этому типу и возвращает обёртку WithDispatch. Подробнее
MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/runtime/struct.LocalRuntime.html