Actor 模式¶
在写完第一个 Actor 之后常用的几种写法:命名 Actor、resolve,以及何时用 ask / tell。
命名 Actor 与 resolve¶
给 Actor 起一个 name,其他代码(本进程或集群内)可以用 resolve 按名查找:
import pulsing as pul
@pul.remote
class Worker:
def process(self, data: str) -> str:
return f"processed: {data}"
async def main():
await pul.init()
# 带名字 spawn,可通过 resolve 发现
await Worker.spawn(name="worker")
# 之后(或另一节点):按名拿到 proxy
worker = await Worker.resolve("worker")
result = await worker.process("hello")
await pul.shutdown()
匿名 Actor(不传 name=)只能通过 spawn() 返回的 ActorRef 访问。
Ask 与 tell¶
| 模式 | 方法 | 适用场景 |
|---|---|---|
| 请求–响应 | await ref.ask(msg) 或 await proxy.method() |
需要返回值。 |
| 发送即忘 | await ref.tell(msg) |
不需要回复;尽力而为投递。 |
有类型 proxy 时,方法调用相当于 ask(会返回结果)。只有在手头是 ActorRef 且不想等待回复时再用 tell。