aio_parallel_tools.aio_actor package¶
Actor API¶
Asynchronous Actor Abstract Base Class.
-
class
aio_parallel_tools.aio_actor.actor_abc.ActorABC[source]¶ Bases:
objectAsynchronous Actor Abstract Base Class.
-
abstract classmethod
AvailableScope() → List[Any][source]¶ Get the available actor instance.
- Returns
List of the available actor instance.
- Return type
List[Any]
-
abstract classmethod
BestToSendScope(num: int = None) → List[Any][source]¶ Get a number of the best to send actor instance.
- Returns
A number of the best to send actor instance.
- Return type
List[Any]
-
abstract classmethod
Close(num: int)[source]¶ Close a number of available actor.
- Parameters
num (int) – Close a number of available actor.
-
abstract classmethod
FindById(aid: str) → Any[source]¶ Find a actor instance by id.
- Parameters
aid (str) – actor id in str
- Returns
a actor instance.
- Return type
Any
-
abstract classmethod
NotAvailableScope() → List[Any][source]¶ Get the not available actor instance.
- Returns
List of the not available actor instance.
- Return type
List[Any]
-
abstract classmethod
NotPausedScope() → List[Any][source]¶ Get the not paused actor instance.
- Returns
List of the not paused actor instance.
- Return type
List[Any]
-
abstract classmethod
NotRunningScope() → List[Any][source]¶ Get the not running actor instance.
- Returns
List of the running actor instance.
- Return type
List[Any]
-
abstract classmethod
PausedScope() → List[Any][source]¶ Get the paused actor instance.
- Returns
List of the paused actor instance.
- Return type
List[Any]
-
abstract classmethod
Publish(message: Any, timeout: int)[source]¶ Send message to all available actor.
- Parameters
message (Any) – Message to send to the actor.
timeout (int) – Timeout of the sending action.
-
abstract classmethod
Restart(num: int)[source]¶ Restart a number of not available actor.
- Parameters
num (int) – The number of actor to restart.
-
abstract classmethod
RunningScope() → List[Any][source]¶ Get the running actor instance.
- Returns
List of the running actor instance.
- Return type
List[Any]
-
abstract classmethod
Send(message: Any, timeout: int)[source]¶ Send message to the most available actor.
- Parameters
message (Any) – Message to send to the actor.
timeout (int) – Timeout of the sending action.
-
abstract classmethod
SendById(aid: str, message: Any, timeout: int)[source]¶ Find a actor instance by id to send message.
- Parameters
aid (str) – actor id in str
message (Any) – Message to send to the actor.
timeout (int) – Timeout of the sending action.
-
abstract classmethod
SendRandom(message: Any, timeout)[source]¶ Send message to a random available actor.
- Parameters
message (Any) – Message to send to the actor.
timeout (int) – Timeout of the sending action.
-
abstract classmethod
Start(num: int, inbox_maxsize: int = 0, loop: Optional[asyncio.events.AbstractEventLoop] = None, rev_timeout: Optional[int] = None)[source]¶ Create and start a number of actor.
- Parameters
num (int) – The number of actor to create and start.
inbox_maxsize (int, optional) – inbox’s Size. Defaults to 0.
loop (Optional[asyncio.events.AbstractEventLoop], optional) – Event loop which the actors running on. Defaults to None.
rev_timeout ([int], optional) – timeout for waiting for the recive function. Defaults to None.
-
abstract property
aid¶ Get the id of the actor instance.
- Returns
The id of the actor instance.
- Return type
bool
-
abstract property
available¶ Check if the actor instance is available.
- Returns
if the actor instance is available.
- Return type
bool
-
abstract async
close(timeout: Optional[int] = None)[source]¶ Close the actor instance.
- Parameters
timeout (Optional[int], optional) – timeout of closing action. Defaults to None.
-
abstract property
inbox_maxsize¶ Max size of the actor instance’s message box.
- Returns
The max size of the actor instance’s message box.
- Return type
int
-
abstract property
inbox_size¶ Size of the actor instance’s message box.
- Returns
Size of the actor instance’s message box.
- Return type
int
-
abstract property
loop¶ The event loop tasks running on.
- Returns
The event loop tasks running on.
- Return type
asyncio.events.AbstractEventLoop
-
abstract property
paused¶ Check if the actor instance is paused.
- Returns
if the actor instance is paused.
- Return type
bool
-
abstract async
receive(message)[source]¶ Define in your subclass.
- Parameters
message (Any) – Message to send to the actor.
-
abstract property
running¶ Check if the actor instance is running.
- Returns
If the actor instance is running..
- Return type
bool
-
abstract async
send(message, timeout=None)[source]¶ Send a message to the actor instance.
- Parameters
message (Any) – Message to send to the actor.
timeout (int) – Timeout of the sending action.
-
abstract
send_nowait(message)[source]¶ Send a message to the actor instance with no wait.
- Parameters
message (Any) – Message to send to the actor.
-
abstract property
task¶ Task running inside the actor instance.
- Returns
The task running inside the actor instance.
- Return type
asyncio.Task
-
abstract classmethod
Base Class¶
Async Actor Tool.
-
class
aio_parallel_tools.aio_actor.actor_basic.AioActor(inbox_maxsize: int = 0, loop: Optional[asyncio.events.AbstractEventLoop] = None, rev_timeout: Optional[int] = None)[source]¶ Bases:
aio_parallel_tools.aio_actor.mixins.manage_mixin.ManageMixin,aio_parallel_tools.aio_actor.mixins.inbox_mixin.InboxMixin,aio_parallel_tools.aio_actor.mixins.task_mixin.TaskMixin,aio_parallel_tools.aio_actor.mixins.hooks_mixin.HooksMixin,aio_parallel_tools.aio_actor.mixins.id_mixin.IdentifyMixin,aio_parallel_tools.aio_actor.mixins.loop_mixin.LoopMixin,aio_parallel_tools.aio_actor.actor_abc.ActorABCBase Async Actor class.
To use the base class,we should create a sub class and write a implement of async method receive.
Usage:
>>> class Pinger(AioActor): ... async def receive(self, message): ... print(message) ... try: ... await ActorManager.get_actor("Ponger").Send('ping') ... except Exception as e: ... print(f"receive run error {e}") ... finally: ... await asyncio.sleep(0.5) >>> class Ponger(AioActor): ... async def receive(self, message): ... print(message) ... try: ... await ActorManager.get_actor("Pinger").Send('pong') ... except Exception as e: ... print(f"receive run error {e}") ... finally: ... await asyncio.sleep(0.5) >>> async def main(): Pinger.Start(num=3) Ponger.Start(num=3) await asyncio.sleep(1) for i in Pinger.Members: print("****************") print(i.aid) print(i.available) print(i.running) print(i.paused) print("****************") await Pinger.Send("start") await asyncio.sleep(10) await Pinger.Close(num=3) await Ponger.Close(num=3)
-
Members= {}¶
-
property
available¶ Check if the actor instance is available.
- Returns
if the actor instance is available.
- Return type
bool
-
Actor Manager¶
Functions for managing Actors.
-
class
aio_parallel_tools.aio_actor.actor_manager.ActorManagerRegister[source]¶ Bases:
typeMeta class for regist subclass for management.