pub struct ComputePool { /* private fields */ }Expand description
A compute pool that manages CPU-intensive operations
Implementations§
Source§impl ComputePool
impl ComputePool
Sourcepub fn new(config: ComputeConfig) -> Result<Self>
pub fn new(config: ComputeConfig) -> Result<Self>
Create a new compute pool with the given configuration
Sourcepub fn with_defaults() -> Result<Self>
pub fn with_defaults() -> Result<Self>
Create a compute pool with default configuration
Sourcepub fn execute_sync<F, R>(&self, f: F) -> R
pub fn execute_sync<F, R>(&self, f: F) -> R
Execute a synchronous computation on the thread pool
This method is designed to be called from within spawn_blocking or other
synchronous contexts. It has minimal overhead as it directly uses Rayon
without the async bridge.
§Example
tokio::task::spawn_blocking(move || {
pool.execute_sync(|| {
// CPU-intensive work
expensive_computation()
})
});Sourcepub async fn execute<F, R>(&self, f: F) -> Result<R>
pub async fn execute<F, R>(&self, f: F) -> Result<R>
Execute a compute task in the Rayon pool
This bridges from async context to the Rayon thread pool, allowing CPU-intensive work to run without blocking Tokio workers.
Note: This method has ~25μs overhead for small tasks due to the async
channel communication. For very small computations (<100μs), consider
running directly on Tokio or using spawn_blocking with execute_sync.
Sourcepub async fn execute_scoped<F, R>(&self, f: F) -> Result<R>
pub async fn execute_scoped<F, R>(&self, f: F) -> Result<R>
Execute a function with a Rayon scope
This allows spawning multiple parallel tasks within the scope, with the guarantee that all tasks complete before returning.
Sourcepub async fn execute_scoped_fifo<F, R>(&self, f: F) -> Result<R>
pub async fn execute_scoped_fifo<F, R>(&self, f: F) -> Result<R>
Execute a function with a FIFO scope
Similar to execute_scoped, but tasks are prioritized in FIFO order rather than the default LIFO order.
Sourcepub async fn join<F1, F2, R1, R2>(&self, f1: F1, f2: F2) -> Result<(R1, R2)>
pub async fn join<F1, F2, R1, R2>(&self, f1: F1, f2: F2) -> Result<(R1, R2)>
Join two computations in parallel
Sourcepub fn metrics(&self) -> &ComputeMetrics
pub fn metrics(&self) -> &ComputeMetrics
Get metrics for this compute pool
Sourcepub fn num_threads(&self) -> usize
pub fn num_threads(&self) -> usize
Get the number of threads in the pool
Sourcepub async fn install<F, R>(&self, f: F) -> Result<R>
pub async fn install<F, R>(&self, f: F) -> Result<R>
Install this pool as the Rayon pool for the given closure
This method is essential for using Rayon’s parallel iterators (like par_iter,
par_chunks, etc.) with this specific thread pool. Any parallel iterator
operations within the closure will execute on this pool’s threads.
§Example
use rayon::prelude::*;
// Process data using parallel iterators
let result = pool.install(|| {
data.par_chunks(100)
.map(|chunk| process_chunk(chunk))
.collect::<Vec<_>>()
}).await?;§Concurrent Usage
Multiple async tasks can call install() concurrently on the same pool.
The Rayon work-stealing scheduler will efficiently distribute work from
all concurrent operations:
// These can run concurrently without interference
let task1 = pool.install(|| data1.par_iter().map(f1).collect());
let task2 = pool.install(|| data2.par_chunks(50).map(f2).collect());Trait Implementations§
Source§impl Clone for ComputePool
impl Clone for ComputePool
Source§fn clone(&self) -> ComputePool
fn clone(&self) -> ComputePool
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl ComputePoolExt for ComputePool
impl ComputePoolExt for ComputePool
Source§fn parallel_batch<'life0, 'async_trait, T, F, R>(
&'life0 self,
items: Vec<T>,
batch_size: usize,
f: F,
) -> Pin<Box<dyn Future<Output = Result<Vec<R>>> + Send + 'async_trait>>
fn parallel_batch<'life0, 'async_trait, T, F, R>( &'life0 self, items: Vec<T>, batch_size: usize, f: F, ) -> Pin<Box<dyn Future<Output = Result<Vec<R>>> + Send + 'async_trait>>
Auto Trait Implementations§
impl Freeze for ComputePool
impl !RefUnwindSafe for ComputePool
impl Send for ComputePool
impl Sync for ComputePool
impl Unpin for ComputePool
impl !UnwindSafe for ComputePool
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);