如何从主进程检查scala参与者的状态?
我是相对较新的Scala演员。我有一张巨大的地图,它被分成更小的块,并通过演员来执行。根据地图大小,创建的参与者数量会有所不同。演员们工作得很好,整个过程也完成了。但是如何检查生成的参与者的状态呢?在java中,我熟悉线程池执行器服务的使用。在Scala中,这是如何实现的 有多种方法可以满足您的需求:如何从主进程检查scala参与者的状态?,scala,akka,actor,Scala,Akka,Actor,我是相对较新的Scala演员。我有一张巨大的地图,它被分成更小的块,并通过演员来执行。根据地图大小,创建的参与者数量会有所不同。演员们工作得很好,整个过程也完成了。但是如何检查生成的参与者的状态呢?在java中,我熟悉线程池执行器服务的使用。在Scala中,这是如何实现的 有多种方法可以满足您的需求: 让工作者参与者将消息发送回发送者,通知其操作已完成。每个参与者都有一个对发送者参与者(发送消息的参与者)的引用,您可以使用该引用发回完成消息。然后发送者可以处理该消息 使用ask,返回一个未来,而
ask
,返回一个未来
,而不是通过tell
(例如actor!msg
)发送消息。您可以在将来设置一个在完成时运行的回调DeathWatch
机制监控工作者,该机制在子参与者终止时通知父参与者。在这种方法中,终止意味着操作已经完成。但是,您需要跟踪父级接收的终止数量,以确定所有工作角色何时完成case类PerformWork(i:Int)
案例对象一
类ParentActor(大小:Int)扩展了Actor{
为了{
结果+=1
如果(结果==大小){
//工作完成了
}
}
}
}
类工作者扩展了参与者{
def接收={
案例m:PerformWork=>{
//做些工作
// ...
发信人!工作电话
}
}
}
有多种方法可以满足您的需求:
ask
,返回Future
,而不是通过tell
(例如actor!msg
)发送消息。您可以设置在完成后运行的Future回调DeathWatch
机制监控工作者,该机制在子参与者终止时通知父参与者。在这种方法中,终止意味着操作已完成。但是,您需要跟踪父参与者收到的终止数量,以确定所有工作者参与者何时完成case类PerformWork(i:Int)
案例对象一
类ParentActor(大小:Int)扩展了Actor{
为了{
结果+=1
如果(结果==大小){
//工作完成了
}
}
}
}
类工作者扩展了参与者{
def接收={
案例m:PerformWork=>{
//做些工作
// ...
发信人!工作电话
}
}
}
如何调用ParentActor?如果调用ParentActor两次怎么办?如何调用ParentActor?如果调用ParentActor两次怎么办?
case class PerformWork(i: Int)
case object WorkDone
class ParentActor(size: Int) extends Actor {
for (i <- 1 to size) {
val actor = context.actorOf(Props[Worker], s"worker$i")
actor ! PerformWork(i)
}
var result = 0
def receive = {
case WorkDone => {
result += 1
if (result == size) {
// work is done
}
}
}
}
class Worker extends Actor {
def receive = {
case m: PerformWork => {
// do some work
// ...
sender ! WorkDone
}
}
}