tokio_threadpool

Struct ThreadPool

Source
pub struct ThreadPool { /* private fields */ }
Expand description

Work-stealing based thread pool for executing futures.

If a ThreadPool instance is dropped without explicitly being shutdown, shutdown_now is called implicitly, forcing all tasks that have not yet completed to be dropped.

Create ThreadPool instances using Builder.

Implementations§

Source§

impl ThreadPool

Source

pub fn new() -> ThreadPool

Create a new ThreadPool with default values.

Use Builder for creating a configured thread pool.

Source

pub fn spawn<F>(&self, future: F)
where F: Future<Item = (), Error = ()> + Send + 'static,

Spawn a future onto the thread pool.

This function takes ownership of the future and randomly assigns it to a worker thread. The thread will then start executing the future.

§Examples
use futures::future::{Future, lazy};

// Create a thread pool with default configuration values
let thread_pool = ThreadPool::new();

thread_pool.spawn(lazy(|| {
    println!("called from a worker thread");
    Ok(())
}));

// Gracefully shutdown the threadpool
thread_pool.shutdown().wait().unwrap();
§Panics

This function panics if the spawn fails. Use Sender::spawn for a version that returns a Result instead of panicking.

Source

pub fn spawn_handle<F>(&self, future: F) -> SpawnHandle<F::Item, F::Error>
where F: Future + Send + 'static, F::Item: Send + 'static, F::Error: Send + 'static,

Spawn a future on to the thread pool, return a future representing the produced value.

The SpawnHandle returned is a future that is a proxy for future itself. When future completes on this thread pool then the SpawnHandle will itself be resolved.

§Examples
use futures::future::{Future, lazy};

// Create a thread pool with default configuration values
let thread_pool = ThreadPool::new();

let handle = thread_pool.spawn_handle(lazy(|| Ok::<_, ()>(42)));

let value = handle.wait().unwrap();
assert_eq!(value, 42);

// Gracefully shutdown the threadpool
thread_pool.shutdown().wait().unwrap();
§Panics

This function panics if the spawn fails.

Source

pub fn sender(&self) -> &Sender

Return a reference to the sender handle

The handle is used to spawn futures onto the thread pool. It also implements the Executor trait.

Source

pub fn sender_mut(&mut self) -> &mut Sender

Return a mutable reference to the sender handle

Source

pub fn shutdown_on_idle(self) -> Shutdown

Shutdown the pool once it becomes idle.

Idle is defined as the completion of all futures that have been spawned onto the thread pool. There may still be outstanding handles when the thread pool reaches an idle state.

Once the idle state is reached, calling spawn on any outstanding handle will result in an error. All worker threads are signaled and will shutdown. The returned future completes once all worker threads have completed the shutdown process.

Source

pub fn shutdown(self) -> Shutdown

Shutdown the pool

This prevents the thread pool from accepting new tasks but will allow any existing tasks to complete.

Calling spawn on any outstanding handle will result in an error. All worker threads are signaled and will shutdown. The returned future completes once all worker threads have completed the shutdown process.

Source

pub fn shutdown_now(self) -> Shutdown

Shutdown the pool immediately

This will prevent the thread pool from accepting new tasks and abort any tasks that are currently running on the thread pool.

Calling spawn on any outstanding handle will result in an error. All worker threads are signaled and will shutdown. The returned future completes once all worker threads have completed the shutdown process.

Trait Implementations§

Source§

impl Debug for ThreadPool

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Drop for ThreadPool

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

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 T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.
Source§

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

Source§

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

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.