我正在使用Gpars线程池运行一组任务。任务执行时间变化很大,从几秒钟到20分钟不等。(这些是黄瓜功能文件FWIW。)
幸运的是,features
列表中的最后一个任务花费了最长的时间,因此,当所有其他线程均已完成时,整个过程将在此处执行runtest('australian_government_rebate.feature')25分钟。
这意味着多线程无法实现其承诺。单线程测试需要65分钟才能运行,多线程测试需要48分钟。我希望有30分钟或更长时间。
我的解决方案是按先前的执行时间对功能文件进行排序:
features = ...
features.sort { a, b -> b.executionTime() <=> a.executionTime() }
GParsPool.withPool(noOfCores) {
features.eachParallel { feature ->
runtest(feature)
}
}
我的问题是:我可以保证功能按出现的顺序呈现给GParsPoolfeatures
吗?
对于这种情况,我建议使用从“功能”排序的集合而不是并行集合的顺序for循环内开始的数据流任务:
PGroup group = ...
for(f in features) group.task {runtest(it)}
这将保证您想要的启动顺序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句