Я относительно новый актер Скала. У меня огромная карта, которая сгруппирована в более мелкие блоки и выполняется через актеров. Основываясь на размере карты, количество созданных актеров меняется. Актеры работают хорошо, и процесс завершен. Но как проверить статус сгенерированных актеров? В java я знаком с использованием сервисов-исполнителей потоков. В Scala, как это делается?Как проверить статус актеров Scala от основного процесса?
ответ
Есть несколько способов сделать то, что вы хотите:
Попросите работника актер отправить сообщение обратно отправителю, чтобы информировать его о том, что операция завершена. Каждый актер имеет ссылку на участника-отправителя (тот, который отправил сообщение), который вы можете использовать для отправки сообщения о завершении. Затем отправитель может обработать это сообщение.
Вместо того чтобы посылать сообщение через
tell
(напримерactor ! msg
), использоватьask
, который возвращаетFuture
. Вы можете настроить обратный вызов в Будущем, который запускается после завершения.Если артисты-актеры запущены для одноразовой операции, прекратите ее, остановив ее после завершения операции. Родительский актер (тот, который создал рабочего-актера) может контролировать работника с помощью механизма
DeathWatch
, который информирует родителя о прекращении действия дочернего актера. В этом подходе завершение означает, что операция завершена. Тем не менее, вам нужно будет отслеживать количество выплат, которые получает родитель, чтобы определить, когда закончились все работники.
Какой подход к использованию зависит от вашего варианта использования и характера операций. Наиболее распространенный и гибкий подход - №1. Пример (не проверен):
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
}
}
}
- 1. Проверить статус разветвленного процесса?
- 2. Как получить статус запущенного процесса в Scala
- 3. Проверить статус производственного процесса ASP.NET
- 4. От Java многопоточность до актеров Scala Akka
- 5. Переполнение почтового ящика актеров. Scala
- 6. Управление потоками актеров Scala
- 7. Thread.sleep внутри актеров Scala
- 8. Найти Актер Статус Akka Scala
- 9. sbt: как библиотека должна зависеть от scala-актеров?
- 10. Как получить статус процесса?
- 11. Scala Akka: Как обновить состояние «подчиненных» актеров
- 12. Scala/AKKA - сколько актеров «работает»?
- 13. Мониторинг потоков для актеров scala
- 14. Статус процесса на Linux
- 15. Лучшие практики для актеров поиск от актеров
- 16. Почему статус дочернего процесса отличен от нуля?
- 17. Выполнение основного процесса как child_process
- 18. Python: разделение процесса графического интерфейса от основного логического процесса
- 19. scala specs не выходят при тестировании актеров
- 20. Как правильно использовать аккских актеров в scala
- 21. Получить пользовательский статус процесса
- 22. Как проверить статус процесса после его убийства или это возможно?
- 23. Как проверить статус приложения одобрения процесса на Google Apps Marketplace?
- 24. Как сохранить ресурс процесса из proc_open, чтобы позже проверить статус?
- 25. Как проверить статус AVPlayer?
- 26. Как проверить статус RegularExpressionValidator
- 27. Проверить статус подключения php
- 28. PHP: Как запустить процесс отдельно от основного процесса
- 29. Как проверить статус RxBleConnection
- 30. Как проверить статус опрокидывания?
Как вы называете ParentActor? Что делать, если ParentActor вызывается дважды? – kenlz