我正在使用Gpars线程池运行一组任务。任务执行时间变化很大,从几秒到20分钟不等。 (这些是黄瓜特征文件FWIW。)
幸运的是,INSERT INTO payments (invoice_id)
列表中的最后一个任务运行时间最长,因此整个过程在那里执行runtest(' australian_government_rebate.feature')25分钟所有其他线程都已完成。
这意味着多线程无法实现其承诺。单线程测试需要65分钟才能运行,多线程测试需要48分钟。我希望30分钟或更好。
我的解决方案是按先前的执行时间对要素文件进行排序:
features
我的问题是:我可以保证这些功能会按照features = ...
features.sort { a, b -> b.executionTime() <=> a.executionTime() }
GParsPool.withPool(noOfCores) {
features.eachParallel { feature ->
runtest(feature)
}
}
中的顺序呈现给GParsPool吗?
答案 0 :(得分:2)
对于像这样的情况,我建议使用从顺序for循环中开始的数据流任务来排序&#34;特征&#34;而不是并行集合:
PGroup group = ...
for(f in features) group.task {runtest(it)}
这可以保证您想要的启动顺序。
答案 1 :(得分:0)
保证?不,但极有可能。我认为如果你的执行时间差别那么大,你的方法实际上是很好的。