gpt4 book ai didi

java - 如何知道 Actor 完成了执行?

转载 作者:行者123 更新时间:2023-12-01 10:52:11 25 4
gpt4 key购买 nike

我想从主 Actor 那里知道每个 worker Actor 是否完成。请帮助我 ...我有一个主要 Actor 和 Worker1 Worker2 Worker3。这里Worker1、Worker2和Worker3正在并行执行。我如何识别每个工作人员是从 mainActor 完成的?

最佳答案

依赖项将您的主引用注入(inject)到工作线程的构造函数中,并让主线程知道工作何时完成。

这是一个示例 Worker:

public class CompletedJob {
public ActorRef actorRef;
CompletedJob(ActorRef actorRef_i) { actorRef = actorRef_i;}
}

class WorkerActor extends UntypedActor {

private ActorRef masterRef;

//pass masterRef into the constructor
WorkerActor(ActorRef masterRef_i) {
masterRef = masterRef_i;
}

public void onReceive(Object message) throws Exception {
if(message instanceof Work) {
Work work = (Work) message;
getSender().tell(longProcess(work), getSelf()); //send result to work sender
masterRef.tell(CompletedJob(getSelf()), getSelf()); //send completion to master
}
}
}

以及基于 documentation 的 Master Actor 定义的随附示例:

class MasterActor extends UntypedActor {

Router router;
{
List<Routee> routees = new ArrayList<Routee>();
for (int i = 0; i < 5; i++) {
ActorRef r = getContext().actorOf(Props.create(Worker.class, getSelf()));
getContext().watch(r);
routees.add(new ActorRefRoutee(r));
}
router = new Router(new RoundRobinRoutingLogic(), routees);
}

public void onReceive(Object message) throws Exception {
if(message instanceof Work) {
router.route(message, sender());
}
if(message instanceof CompletedJob) {
//handle a job completed update
}
}

}

关于java - 如何知道 Actor 完成了执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33801210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com