加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何同时执行两个任务并在Groovy中等待结果?

发布时间:2020-12-14 16:31:28 所属栏目:大数据 来源:网络整理
导读:我有一个大型的处理任务,我相信它已经成熟,可以提高并发性和并行性. 我看了一下GPars文档,发现它们很混乱,所以我希望这里的人能提供帮助. 我想要并行执行的第一项任务目前看起来像这样: def providerOneProgrammes = providerOneProgrammeService.getProgra
我有一个大型的处理任务,我相信它已经成熟,可以提高并发性和并行性.

我看了一下GPars文档,发现它们很混乱,所以我希望这里的人能提供帮助.

我想要并行执行的第一项任务目前看起来像这样:

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

两者都返回一个对象列表,两者都可以并行运行.

我想一起执行它们然后在处理返回列表之前等待它们完成(然后我会查找列表之间的匹配但我稍后会讨论).

谢谢

拉克什

解决方法

在这里利用GPars的最简单方法是使用callAsync.这是一个简单的例子:

@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()}"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读