Oscar 接口#
定义 actor#
import mars.oscar as mo
# stateful actor, for stateless actor, inherit from mo.StatelessActor
class MyActor(mo.Actor):
def __init__(self, *args, **kwargs):
pass
async def __post_create__(self):
# called after created
pass
async def __pre_destroy__(self):
# called before destroy
pass
def method_a(self, arg_1, arg_2, **kw_1): # user-defined function
pass
async def method_b(self, arg_1, arg_2, **kw_1) # user-defined async function
pass
创建 actor#
import mars.oscar as mo
actor_ref = await mo.create_actor(
MyActor, 1, 2, a=1, b=2
address='<ip>:<port>', uid='UniqueActorName')
销毁 actor#
import mars.oscar as mo
await mo.destroy_actor(actor_ref)
# or
await actor_ref.destroy()
检查 actor 是否存在#
import mars.oscar as mo
await mo.has_actor(mo.ActorRef(worker_addr, actor_uid))
引用 actor#
import mars.oscar as mo
actor_ref = await mo.actor_ref(worker_addr, actor_id)
调用 actor 方法#
# send
await actor_ref.method_a.send(1, 2, a=1, b=2)
# equivalent to actor_ref.method_a.send
await actor_ref.method_a(1, 2, a=1, b=2)
# tell
await actor_ref.method_a.tell(1, 2, a=1, b=2)