ProcessExecutor

Struct ProcessExecutor 

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

Process-based executor that runs cells in isolated worker processes.

Unlike LinearExecutor, this executor can truly interrupt cell execution by killing the worker process. This provides:

  • Immediate interruption (no need for cooperative checks)
  • Crash isolation (panics don’t affect the server)
  • Memory isolation (runaway cells can’t OOM the server)

Implementations§

Source§

impl ProcessExecutor

Source

pub fn new(state_dir: impl AsRef<Path>) -> Result<Self>

Create a new process executor.

Source

pub fn with_state(state: StateManager) -> Self

Create with an existing state manager.

Source

pub fn with_warm_pool( state_dir: impl AsRef<Path>, pool_size: usize, ) -> Result<Self>

Create with a pre-warmed worker pool.

Source

pub fn set_callback(&mut self, callback: impl ExecutionCallback + 'static)

Set the execution callback for progress reporting.

Source

pub fn set_abort_handle(&mut self, handle: AbortHandle)

Set the abort handle for interruption.

Source

pub fn abort_handle(&self) -> Option<&AbortHandle>

Get the current abort handle.

Source

pub fn register_cell(&mut self, compiled: CompiledCell, dep_count: usize)

Register a compiled cell for execution.

Unlike LinearExecutor::load_cell, this doesn’t actually load the dylib. The worker process will load it when executing.

Source

pub fn unregister_cell(&mut self, cell_id: CellId) -> Option<CompiledCell>

Unregister a cell.

Source

pub fn is_registered(&self, cell_id: CellId) -> bool

Check if a cell is registered.

Source

pub fn execute_cell( &mut self, cell_id: CellId, inputs: &[Arc<BoxedOutput>], ) -> Result<BoxedOutput>

Execute a single cell with the given inputs.

This runs the cell in a worker process that can be killed for interruption.

Source

pub fn execute_cell_with_widgets( &mut self, cell_id: CellId, inputs: &[Arc<BoxedOutput>], widget_values_json: Vec<u8>, ) -> Result<(BoxedOutput, Vec<u8>)>

Execute a single cell with the given inputs and widget values.

This runs the cell in a worker process that can be killed for interruption. Returns the cell output and any registered widget definitions as JSON.

Source

pub fn execute_and_store( &mut self, cell_id: CellId, inputs: &[Arc<BoxedOutput>], ) -> Result<()>

Execute a cell and store the output in the state manager.

Source

pub fn execute_in_order( &mut self, order: &[CellId], deps: &HashMap<CellId, Vec<CellId>>, ) -> Result<()>

Execute cells in the given order, resolving dependencies from state.

Source

pub fn kill_current(&self)

Kill the currently executing cell immediately.

This is the key feature - we can terminate the worker process mid-computation without any cooperation from the cell. This method is thread-safe and can be called from any thread.

Source

pub fn get_kill_handle(&self) -> Option<ExecutorKillHandle>

Get a handle that can be used to kill the current execution from another thread.

Returns None if no execution is in progress. The returned handle is safe to clone and use from any thread.

Source

pub fn abort(&mut self)

Abort execution and kill any running cell.

Sets the abort flag and kills the current worker.

Source

pub fn state(&self) -> &StateManager

Get a reference to the state manager.

Source

pub fn state_mut(&mut self) -> &mut StateManager

Get a mutable reference to the state manager.

Source

pub fn shutdown(&mut self)

Shutdown the executor and all workers.

Trait Implementations§

Source§

impl Drop for ProcessExecutor

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> ArchivePointee for T

Source§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
Source§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
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> Instrument for T

Source§

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

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> LayoutRaw for T

Source§

fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>

Returns the layout of the type.
Source§

impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
where T: SharedNiching<N1, N2>, N1: Niching<T>, N2: Niching<T>,

Source§

unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool

Returns whether the given value has been niched. Read more
Source§

fn resolve_niched(out: Place<NichedOption<T, N1>>)

Writes data to out indicating that a T is niched.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Pointee for T

Source§

type Metadata = ()

The metadata type for pointers and references to this type.
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.
Source§

impl<T> WithSubscriber for T

Source§

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

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more