如何同时执行两个任务并等待Groovy中的结果? [英] How do I execute two tasks simultaneously and wait for the results in Groovy?

查看:1026
本文介绍了如何同时执行两个任务并等待Groovy中的结果?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个很大的处理任务,我相信成熟的并发和并行的效率是成熟的。



我看了GPars文档,我发现他们很混乱,所以我希望这里的人可以帮助。



我想在并行的第一个任务看起来像这样:

  def providerOneProgrammes = providerOneProgrammeService.getProgrammes(timeWindow)
def providerTwoProgrammes = providerTwoProgrammeService.getProgrammes(timeWindow)
pre>

都返回对象列表,两者可以并行运行。



他们在一起,然后等待他们完成,然后处理返回列表(我会寻找列表之间的匹配,但我会来的,以后)。



谢谢



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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆