Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 在一个参与者完成其工作后终止所有其他参与者_Scala_Akka_Actor - Fatal编程技术网

Scala 在一个参与者完成其工作后终止所有其他参与者

Scala 在一个参与者完成其工作后终止所有其他参与者,scala,akka,actor,Scala,Akka,Actor,我对scala和akka还很陌生。我想知道,一旦一个演员完成了他的工作,他会终止所有其他演员 代码的基本结构如下所示。有一名主管负责5名工人,这些工人由RoundRobinPool生成。每个工人都在做一些工作,并将结果发送回船长。我需要意识到的是,一旦其他工人中的一个完成了工作,就让主人终止所有其他工人的工作,并将其送回主人。然后,主程序将向主函数发送一些相对值,然后整个程序终止 你知道如何实现这一点吗 //Code: object X{ sealed trait Message

我对scala和akka还很陌生。我想知道,一旦一个演员完成了他的工作,他会终止所有其他演员

代码的基本结构如下所示。有一名主管负责5名工人,这些工人由RoundRobinPool生成。每个工人都在做一些工作,并将结果发送回船长。我需要意识到的是,一旦其他工人中的一个完成了工作,就让主人终止所有其他工人的工作,并将其送回主人。然后,主程序将向主函数发送一些相对值,然后整个程序终止

你知道如何实现这一点吗

//Code:    
object X{
    sealed trait Message 
    case class Result() extends Message 
    case class Work() extends Message
    case class Result() extends Message 
    case class Totalresult() extends Message
    class Worker extends Actor{
        def receive={
           case Work =>
           sender ! Result}
    }//End of class Worker         
    class Master(nrOfWorkers: Int) extends Actor{
        val workerRouter =context.actorOf(RoundRobinPool(nrOfWorkers).props(Props[Worker]))) 
        def receive={
            case Calculate => calculateSender=sender                   
            case Result => calculateSender ! Totoalresult()
        }
    }//End of class Master  
    def main(args: String) {
       val system =ActorSystem("mysystem")
       val master=system.actorOf(Props(new Master(5),name="master")  
       val future=master ? Calculate
    }  
}

Akka的一个主要监管方面是,一个特定的演员被认为对其子女负责。在这种情况下,这意味着“大师”演员的死亡将自动导致其所有子演员的终止,因此您真正需要做的就是让“大师”演员自行终止。这可以通过多种方式实现,例如通过
Kill
toxingpill
消息本身-例如,添加一行:
self!将
TotalResult
消息发送回
calculateSender
后,立即服用毒药

请注意,在您在代码中描述的特定场景中,您设置为在main中接收结果的未来,但不包括对该结果的任何处理(例如,
onComplete
调用,或使用
Wait
)。在这样的处理过程中,您可以包括对
system.shutdown()
的调用,而不是让“Master”自行终止,然后作为关闭过程的一部分终止所有参与者-只需确保只有在将来(以及参与者背后的工作)完成后才调用它


PS:有关终止演员的不同方式之间的差异的更多信息,请参见。

Akka的一个主要监管方面是,特定演员被视为对其子女负责。在这种情况下,这意味着“大师”演员的死亡将自动导致其所有子演员的终止,因此您真正需要做的就是让“大师”演员自行终止。这可以通过多种方式实现,例如通过
Kill
toxingpill
消息本身-例如,添加一行:
self!将
TotalResult
消息发送回
calculateSender
后,立即服用毒药

请注意,在您在代码中描述的特定场景中,您设置为在main中接收结果的未来,但不包括对该结果的任何处理(例如,
onComplete
调用,或使用
Wait
)。在这样的处理过程中,您可以包括对
system.shutdown()
的调用,而不是让“Master”自行终止,然后作为关闭过程的一部分终止所有参与者-只需确保只有在将来(以及参与者背后的工作)完成后才调用它


PS:有关终止演员的不同方式之间的差异的更多信息,请参阅。

感谢您的回复。正如你所说,我尝试过杀死大师,虽然结果很好,但终端上也显示,剩余的作品信息没有传递给大师。我意识到这是由于主演员的终止,但这个警告只是恼人。有什么办法可以消除这种情况吗?@ChenChen如果你说的是关于发送到死信队列的邮件的警告,因为预期的收件人已经死亡,我很确定有一个设置可以控制这些邮件的记录(我认为记录的邮件甚至提到了这一点)。一般来说,我认为这样的消息相对无害,可能只是有助于偶尔调试更严重的问题。是的,你是对的。我检查了文档,它说这可以通过添加:
akka{log dead letters during shutdown=on}
来完成。我是否将其放在导入行或sbt之后?这通常通过传递到
ActorSystem
初始化的配置来处理-有关详细信息,请参阅。感谢您的回复。正如你所说,我尝试过杀死大师,虽然结果很好,但终端上也显示,剩余的作品信息没有传递给大师。我意识到这是由于主演员的终止,但这个警告只是恼人。有什么办法可以消除这种情况吗?@ChenChen如果你说的是关于发送到死信队列的邮件的警告,因为预期的收件人已经死亡,我很确定有一个设置可以控制这些邮件的记录(我认为记录的邮件甚至提到了这一点)。一般来说,我认为这样的消息相对无害,可能只是有助于偶尔调试更严重的问题。是的,你是对的。我检查了文档,它说这可以通过添加:
akka{log dead letters during shutdown=on}
来完成。我是否将其放在导入行或sbt之后?这通常通过传递到
ActorSystem
初始化的配置来处理-有关详细信息,请参阅。