문서에서 잘못 생각한 것 같습니다.GPars : 배우가 완료되기를 기다리는 중
저는 XMLActor와 HttpActor의 두 액터가 있습니다. XMLActor는 xmlFiles를 읽고 HTTPActor에 메시지를 보내 처리합니다. XMLActor는 HttpActor보다 빨리 끝날 것입니다.
내 주 클래스 호출은 두 액터 모두에 참여합니다. 두 주체가 끝난 후 주 스레드 만 종료 될 것으로 예상했습니다. 그러나 실제로 일어나고있는 일은 모든 메시지가 XMLActor에 의해 처리되는 즉시 시스템이 종료되고 많은 메시지가 HttpActor에 의해 처리되지 않는다는 것입니다.
일부 래치 또는 AtomicInteger를 사용하여 모든 메시지가 소비 될 때까지 기다릴 수는 있지만 좀 더 우아한 방법이 있는지 궁금합니다.
final HttpActor httpActor = new HttpActor().start()
final XMLActor xmlActor = new XMLActor(httpActor:httpActor).start()
Actors.actor {
file.eachLine { line ->
def chunks = line.split(",")
def id = chunks[0].replaceAll("\\\"","").trim()
def name = chunks[1].replaceAll("\\\"","").trim()
xmlActor << new FileToRead(basePath:args[1],id:id,name:name, fileCounter:counter)
}
}
[httpActor, xmlActor]*.join()
//inside xmlActor
countries.each { country ->
httpActor << new AlbumPriceMessage(id:message.id, country:country)
}
당신은 맞다는 자동으로 프로세스를 죽이는 HTTPActor에서 예외였다. 스크립트가 백그라운드에서 실행 중이고/dev/null에 출력을 보내고있는 동안 그걸 알아내는 동안 시간이 좀 걸렸습니다. D –
한 가지 질문은 중지를 호출해야합니까? 나는 또 다른 이슈 (OOM 오류)를 만났는데, 이것이 내가 배우들을 멈추지 않았다는 사실 때문인지 궁금하다. 그리고 나는 수십만 명의 액티브 배우들과 함께 추억 속에 남았다. –