如何同时执行两个任务并等待Groovy中的结果? [英] How do I execute two tasks simultaneously and wait for the results in Groovy?
问题描述
我有一个很大的处理任务,我相信成熟的并发和并行的效率是成熟的。
我看了GPars文档,我发现他们很混乱,所以我希望这里的人可以帮助。
我想在并行的第一个任务看起来像这样:
def providerOneProgrammes = providerOneProgrammeService.getProgrammes(timeWindow)
pre>
def providerTwoProgrammes = providerTwoProgrammeService.getProgrammes(timeWindow)
都返回对象列表,两者可以并行运行。
他们在一起,然后等待他们完成,然后处理返回列表(我会寻找列表之间的匹配,但我会来的,以后)。
谢谢
Rakesh
解决方案使用GPars的最简单方法是
callAsync
。这里有一个简单的例子:@Grab(group ='org.codehaus.gpars',module ='gpars',version = '1.0-beta-2')
import groovyx.gpars.GParsPool
def providerOneProgrammeService(timeWindow){
printlnp1 starts
.sleep(4000)
printlnp1 still going
Thread.sleep(4000)
printlnp1 ends
returnp1 return value
} b
$ b def providerTwoProgrammeService(timeWindow){
printlnp2 starts
Thread.sleep(5000)
printlnp2 still going
Thread.sleep 5000)
printlnp2 still going
Thread.sleep(5000)
printlnp2 ends
returnp2 return value
}
def results = []
GParsPool.withPool {
results<< this& providerOneProgrammeService.callAsync(arg1)
results<< this。& providerTwoProgrammeService.callAsync(arg2)
}
printlndone $ {results * .get()}
I have a large processing task which I believe is ripe for being made more efficient with concurrency and parallelism.
I had a look at the GPars docs and I found them quite confusing so I hope people here can help.
The first task I would like to do in parallel currently looks like this:
def providerOneProgrammes = providerOneProgrammeService.getProgrammes(timeWindow) def providerTwoProgrammes = providerTwoProgrammeService.getProgrammes(timeWindow)
both return a list of objects and both can be run in parallel.
I would like to execute them together and then wait for them to finish before processing the return lists (I will then look for matches between the lists but I'll come to that later).
Thanks
Rakesh
解决方案The simplest way to take advantage of GPars here is with
callAsync
. Here's a simple example:@Grab(group='org.codehaus.gpars', module='gpars', version='1.0-beta-2') import groovyx.gpars.GParsPool def providerOneProgrammeService(timeWindow) { println "p1 starts" Thread.sleep(4000) println "p1 still going" Thread.sleep(4000) println "p1 ends" return "p1 return value" } def providerTwoProgrammeService(timeWindow) { println "p2 starts" Thread.sleep(5000) println "p2 still going" Thread.sleep(5000) println "p2 still going" Thread.sleep(5000) println "p2 ends" return "p2 return value" } def results = [] GParsPool.withPool { results << this.&providerOneProgrammeService.callAsync("arg1") results << this.&providerTwoProgrammeService.callAsync("arg2") } println "done ${results*.get()}"
这篇关于如何同时执行两个任务并等待Groovy中的结果?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!