gpt4 book ai didi

scala Play : How to kill old actors/threads on automatic rebuild?

转载 作者:行者123 更新时间:2023-12-01 09:21:07 26 4
gpt4 key购买 nike

我有一个 Play 应用程序,我在其中使用执行一些持续工作/监控的 Actor 。

例如

class MyActor extends Actor {
def act() { while(true) { /* work */ } }
}

在我的代码中,我只启动这个 actor 一次。
我的问题是每当 play 自动重建应用程序(由于源更改)时,它都会创建一个新的 Actor,但不会删除旧的 actor。如果使用线程(包括守护线程)而不是 actor 进行监视,则会发生完全相同的事情。

有什么方法可以在自动重建时杀死旧的参与者/线程,或者确保只有一个参与者存在(我试过让参与者线程成为一个对象,但是这没有任何帮助),除了手动重新启动应用程序(我可以在每次更改时自动重新启动应用程序)?

此外,是否有更好的后台监控模式(显然不会创建非结束线程的模式)。

谢谢

最佳答案

你可以定义一个Global object监听应用程序事件(必须在默认包中定义):

import play.api.GlobalSettings

object Global extends GlobalSettings {

override def onStart(application: play.api.Application) {
println("Starting actors")
MyActorSystem
}

override def onStop(application: play.api.Application) {
println("Stopping actors")
MyActorSystem.system.shutdown()
}
}

停止和开始事件在重新加载发生时被触发。如果您使用的是 Play 的内部 Actor 系统,我认为您可以改用它:

play.api.libs.concurrent.Akka.system.shutdown()

关于scala Play : How to kill old actors/threads on automatic rebuild?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18165580/

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