Actor和其管理器¶
包中有一个异步Actor相关的工具集,包括一个Actor基类和一个管理器
如何使用¶
我们可以使用`ActorManager`管理所有的actor子类,并使用子类本身来管理其对应的所有实例.
import asyncio
try:
from aio_parallel_tools import AioActor, ActorManager
except ModuleNotFoundError as e:
import sys
from pathlib import Path
p = Path(__file__).absolute()
root = p.parent.parent.parent.absolute()
sys.path.append(str(root))
from aio_parallel_tools import AioActor, ActorManager
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():
actors = ActorManager.has_actor()
for actor_name in actors:
A = ActorManager.get_actor(actor_name)
A.Start(num=3)
await asyncio.sleep(1)
for i in ActorManager.get_actor("Pinger").Members:
print("****************")
print(i.aid)
print(i.available)
print(i.running)
print(i.paused)
print("****************")
await ActorManager.get_actor("Pinger").Send("start")
await asyncio.sleep(10)
for actor_name in actors:
A = ActorManager.get_actor(actor_name)
await A.Close(num=3)
if __name__ == "__main__":
loop = asyncio.get_event_loop()
try:
loop.run_until_complete(main())
finally:
# 不管是什么异常,最终都要close掉loop循环
loop.close()