2016-02-15 1 views
0

После кода вызывается в самом конце моей программы (это написано в JRuby):Akka system.shutdown и awaitTermination

@na.tell(PoisonPill) if defined? @na # @na, @sa and @pe are Actors 
@sa.tell(PoisonPill) if defined? @sa 
@pe.tell(PoisonPill) if defined? @pe 

@@system.shutdown # @@system is the ActorSystem 
@@system.awaitTermination 

Я нашел этот подход here но я не понимаю, почему это работает.

awaitTermination ждать, пока все участники прекратятся?

Не @@system закрыт до awaitTermination называется?

Редактировать: Я заметил, что мне даже не нужно звонить tell(PoisonPill). Я прокомментировал это и все еще работает ...

ответ

0

Хорошо, я решил это сейчас. Когда я звоню system.shutdown, все действующие лица заканчивают свою текущую задачу. Это не то, чего я хочу, потому что в очереди может быть больше задач.

Поэтому я посылаю PoisonPill каждому актеру в конце моего основного потока, а затем жду, чтобы они закончили. Я также использую функцию postStop в каждом акторе, чтобы установить флаг finished и выключить system, когда все актеры закончили.

import Actors # needed for Java-style poisonPill 

actor1.tell(Actors::poisonPill) # for Akka 2.0.0 
actor2.tell(Actors::poisonPill) 
system.awaitTermination 
Смежные вопросы