Skip to main content

PythonActor

Struct PythonActor 

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

An actor for which message handlers are implemented in Python.

Trait Implementations§

Source§

impl Accepts<IntrospectMessage> for PythonActor

Source§

impl Accepts<MeshFailure> for PythonActor

Source§

impl Accepts<PythonMessage> for PythonActor

Source§

impl Actor for PythonActor

Source§

fn handle_undeliverable_message<'life0, 'life1, 'async_trait>( &'life0 mut self, ins: &'life1 Instance<Self>, reason: UndeliverableReason, envelope: Undeliverable<MessageEnvelope>, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Enqueues the message for _handle_undeliverable_message and returns right away, for the same reasons handle_supervision_event does not wait. The verdict comes back later as an UndeliverableOutcome, whose handler applies the default handling if the message was not handled. A message still pending when the actor stops is dropped.

Source§

fn handle_supervision_event<'life0, 'life1, 'life2, 'async_trait>( &'life0 mut self, this: &'life1 Instance<Self>, event: &'life2 ActorSupervisionEvent, ) -> Pin<Box<dyn Future<Output = Result<bool, Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Enqueues the event for __supervise__ and returns Ok(true) right away: true means “accepted”, not “handled”. The verdict comes back later as a SupervisionOutcome, whose handler fails the actor if the event was not handled.

Waiting for the verdict here is only appropriate when supervision is bounded in time and does not need this actor’s loop, as with Rust actors. __supervise__ is arbitrary user code on the actor’s asyncio loop, while this runs on the actor loop, so waiting would stop the actor from handling messages and signals for as long as user code runs, deadlock a __supervise__ that calls its own actor, and keep a stop from cancelling it.

Consequences of not waiting:

  • The actor keeps handling messages until an unhandled verdict arrives.
  • Supervision still pending when the actor stops is cancelled along with the other asyncio tasks in cleanup. This is intentional: recovering from a child failure (e.g. respawning a mesh) is pointless when the result is about to be stopped with us. It includes the events the run loop drains after a handler error, so the actor fails with its own error rather than theirs.
  • The root client’s custom loop must keep running after this returns so that it can deliver the SupervisionOutcome.
Source§

fn init<'life0, 'life1, 'async_trait>( &'life0 mut self, this: &'life1 Instance<Self>, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Initialize the actor, after the runtime has been fully initialized. Init thus provides a mechanism by which an actor can reliably and always receive some initial event that can be used to kick off further (potentially delayed) processing.
Source§

fn cleanup<'life0, 'life1, 'life2, 'async_trait>( &'life0 mut self, this: &'life1 Instance<Self>, err: Option<&'life2 ActorError>, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Cleanup things used by this actor before shutting down. Notably this function is async and allows more complex cleanup. Simpler cleanup can be handled by the impl Drop for this Actor. If err is not None, it is the error that this actor is failing with. Any errors returned by this function will be logged and ignored. If err is None, any errors returned by this function will be propagated as an ActorError. This function is not called if there is a panic in the actor, as the actor may be in an indeterminate state. It is also not called if the process is killed, there is no atexit handler or signal handler.
Source§

fn display_name(&self) -> Option<String>

If overridden, we will use this name in place of the ActorAddr for talking about this actor in supervision error messages.
Source§

fn handle_stop<'life0, 'life1, 'life2, 'async_trait>( &'life0 mut self, this: &'life1 Instance<Self>, mode: StopMode, reason: &'life2 str, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, Self: 'async_trait,

Handle a stop request from the runtime. Read more
Source§

fn spawn_server_task<F>(future: F) -> JoinHandle<<F as Future>::Output>
where F: Future + Send + 'static, <F as Future>::Output: Send + 'static,

This method is used by the runtime to spawn the actor server. It can be used by actors that require customized runtime setups (e.g., dedicated actor threads), or want to use a custom tokio runtime.
Source§

fn handle_delivery_failure_event<'life0, 'life1, 'async_trait>( &'life0 mut self, cx: &'life1 Instance<Self>, undeliverable: Undeliverable<MessageEnvelope>, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait,

Default delivery-failure event handling behavior.
Source§

fn handle_invalid_reference<'life0, 'life1, 'async_trait>( &'life0 mut self, cx: &'life1 Instance<Self>, invalid: InvalidReference, undeliverable: Undeliverable<MessageEnvelope>, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait,

Default invalid-reference handling behavior.
Source§

fn handle_expired_delivery<'life0, 'life1, 'async_trait>( &'life0 mut self, cx: &'life1 Instance<Self>, expired: ExpiredDelivery, undeliverable: Undeliverable<MessageEnvelope>, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait,

Default expired-delivery handling behavior.
Source§

impl Binds<PythonActor> for PythonActor

Source§

fn bind(ports: &HandlerPorts<Self>)

Bind ports in this actor.
Source§

impl Debug for PythonActor

Source§

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

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

impl Handler<MeshFailure> for PythonActor

Source§

fn handle<'life0, 'life1, 'async_trait>( &'life0 mut self, cx: &'life1 Context<'_, Self>, message: MeshFailure, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Handle the next M-typed message.
Source§

fn message_status_reporting() -> MessageStatusReporting

Select which layer reports the message’s terminal telemetry status.
Source§

impl Handler<PythonMessage> for PythonActor

Source§

fn message_status_reporting() -> MessageStatusReporting

Select which layer reports the message’s terminal telemetry status.
Source§

fn handle<'life0, 'life1, 'async_trait>( &'life0 mut self, cx: &'life1 Context<'_, PythonActor>, message: PythonMessage, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Handle the next M-typed message.
Source§

impl Handler<SupervisionOutcome> for PythonActor

Source§

fn handle<'life0, 'life1, 'async_trait>( &'life0 mut self, cx: &'life1 Context<'_, Self>, outcome: SupervisionOutcome, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Handle the next M-typed message.
Source§

fn message_status_reporting() -> MessageStatusReporting

Select which layer reports the message’s terminal telemetry status.
Source§

impl Handler<UndeliverableOutcome> for PythonActor

Source§

fn handle<'life0, 'life1, 'async_trait>( &'life0 mut self, cx: &'life1 Context<'_, Self>, outcome: UndeliverableOutcome, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Handle the next M-typed message.
Source§

fn message_status_reporting() -> MessageStatusReporting

Select which layer reports the message’s terminal telemetry status.
Source§

impl Named for PythonActor

Source§

fn typename() -> &'static str

The globally unique type name for the type. This should typically be the fully qualified Rust name of the type.
Source§

fn typehash() -> u64

A globally unique hash for this type. TODO: actually enforce perfect hashing
Source§

fn typeid() -> TypeId

The TypeId for this type. TypeIds are unique only within a binary, and should not be used for global identification.
Source§

fn port() -> u64

A globally unique numeric identifier for this type.
Source§

fn arm(&self) -> Option<&'static str>

If the named type is an enum, this returns the name of the arm of the value self.
Source§

unsafe fn arm_unchecked(self_: *const ()) -> Option<&'static str>

An unsafe version of ‘arm’, accepting a pointer to the value, for use in type-erased settings. Read more
Source§

impl Referable for PythonActor

Source§

impl RemoteHandles<IntrospectMessage> for PythonActor

Source§

impl RemoteHandles<MeshFailure> for PythonActor

Source§

impl RemoteHandles<PythonMessage> for PythonActor

Source§

impl RemoteSpawn for PythonActor

Source§

type Params = PythonActorParams

The type of parameters used to instantiate the actor remotely.
Source§

fn new<'life0, 'async_trait>( __arg0: PythonActorParams, environment: &'life0 ActorEnvironment, ) -> Pin<Box<dyn Future<Output = Result<Self, Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Creates a new actor instance given its instantiation parameters. The caller shapes environment with any construction context before spawning. The runtime stores the same environment unchanged.
Source§

fn gspawn_root_bind( proc: &Proc, uid: Uid, serialized_params: Vec<u8>, environment: ActorEnvironment, ) -> Pin<Box<dyn Future<Output = Result<ActorAddr, Error>> + Send>>

A type-erased entry point to spawn this actor as a root. This is primarily used by hyperactor’s remote actor registration mechanism.
Source§

fn gspawn_child( proc: &Proc, parent: InstanceCell, uid: Uid, serialized_params: Vec<u8>, environment: ActorEnvironment, ) -> Pin<Box<dyn Future<Output = Result<AnyActorHandle, Error>> + Send>>

A type-erased entry point to spawn this actor as a child. Read more
Source§

fn get_type_id() -> TypeId

The type ID of this actor.

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
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FutureExt for T

§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
Source§

impl<A> Handler<IntrospectMessage> for A
where A: Actor,

Source§

fn handle<'life0, 'life1, 'async_trait>( &'life0 mut self, _cx: &'life1 Context<'_, A>, _message: IntrospectMessage, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, A: 'async_trait,

Handle the next M-typed message.
Source§

fn message_status_reporting() -> MessageStatusReporting

Select which layer reports the message’s terminal telemetry status.
Source§

impl<A> Handler<Undeliverable<MessageEnvelope>> for A
where A: Actor,

Source§

fn handle<'life0, 'life1, 'async_trait>( &'life0 mut self, cx: &'life1 Context<'_, A>, message: Undeliverable<MessageEnvelope>, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, A: 'async_trait,

Handle the next M-typed message.
Source§

fn message_status_reporting() -> MessageStatusReporting

Select which layer reports the message’s terminal telemetry status.
§

impl<T> Instrument for T

§

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

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

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
§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in [Layered].
Source§

impl<M> Message for M
where M: Send + Sync + 'static,

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

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

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

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
§

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

§

fn push_quoted<'q, Q, S>(&mut self, _q: Q, s: S)
where Q: QuoteInto<T>, S: Into<Quotable<'q>>,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
§

impl<T> Ungil for T
where T: Send,

§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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