gpt4 book ai didi

groovy - GPars:WAITING Actor 完成

转载 作者:行者123 更新时间:2023-12-04 05:10:02 26 4
gpt4 key购买 nike

我想我从文档中弄错了。

我有两个 Actor ,XMLActor 和 HttpActor。 XMLActor 读取 xmlFiles,然后将消息发送到 HTTPActor 进行处理。 XMLActor 将比 HttpActor 更快完成。

我的主要类(class)调用 join 两个 Actor 。我原以为主线程只会在两个 Actor 都完成后终止。但是,实际发生的情况是,一旦所有消息都被 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)
}

最佳答案

join() 方法肯定会等待两个 actor 完成。我不明白你如何阻止这两个 Actor ,所以不能对此发表评论。你会发送这种有毒的信息吗?或者对 Actor 调用 stop() ?

例如,您的案例的以下模拟正确停止:

import groovyx.gpars.actor.*;

def httpActor = Actors.staticMessageHandler {
println "Http actor processing " + it
}

def xmlActor = Actors.staticMessageHandler {
println "XML Actor processing " + it
httpActor << it
}

xmlActor.metaClass.afterStop = {
httpActor.stop()
}

100.times {
xmlActor << "File$it"
}
xmlActor.stop()

[xmlActor, httpActor]*.join()
println "done"

关于groovy - GPars:WAITING Actor 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15013751/

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