Spec-Zone.ru › Tokio

Структура LocalRuntime

pub struct LocalRuntime { /* private fields */ }
Доступно только при включённой возможности crate 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> ⓘ
where F: Future + 'static, F::Output: 'static,

Запускает задачу в среде выполнения.

Этот метод аналогичен методу 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> ⓘ
where F: FnOnce() -> R + Send + 'static, R: Send + 'static,

Запускает переданную функцию в потоке из выделенного пула блокирующих потоков.

Эта функция будет выполняться в другом потоке.

Дополнительную информацию см. в документации для нелокальной среды выполнения.

Примеры
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

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Форматирует значение с помощью указанного форматтера. Подробнее

impl Drop for LocalRuntime

fn drop(&mut self)

Выполняет деструктор для этого типа. Подробнее

fn pin_drop(self: Pin<&mut Self>)

🔬Это экспериментальный API, доступный только в nightly-версии. (pin_ergonomics)
Выполняет деструктор для этого типа, но, в отличие от Drop::drop, требует, чтобы self был закреплён. Подробнее

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> Any for T
where T: 'static + ?Sized,

fn type_id(&self) -> TypeId

Возвращает TypeId для self. Подробнее

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

fn borrow(&self) -> &T

Неизменяемо заимствует данные из принадлежащего значения. Подробнее

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

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

Изменяемо заимствует данные из принадлежащего значения. Подробнее

impl<T> From<T> for T

fn from(t: T) -> T

Возвращает аргумент без изменений.

impl<T> Instrument for T

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Инструментирует этот тип с помощью указанного Span, возвращая обёртку Instrumented. Подробнее

fn in_current_span(self) -> Instrumented<Self> ⓘ

Инструментирует этот тип с помощью текущего Span, возвращая обёртку Instrumented. Подробнее

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

fn into(self) -> U

Вызывает U::from(self).

То есть это преобразование выполняется так, как предписывает реализация From<T> for U.

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

type Error = Infallible

Тип, возвращаемый в случае ошибки преобразования.

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

Выполняет преобразование.

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

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

Тип, возвращаемый в случае ошибки преобразования.

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

Выполняет преобразование.

impl<T> WithSubscriber for T

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Присоединяет предоставленный Subscriber к этому типу и возвращает обёртку WithDispatch. Подробнее

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API