我正在制作一个(快速而肮脏的)批处理API,它允许UI发送选择的REST API调用,并一次获得所有调用的结果。
我使用PromiseMap对相关服务进行一些异步REST调用,这些调用随后会被收集。
可能有大量的线程需要运行,我希望限制同时运行的线程数量,类似于Executor的线程池。
如果不将线程物理地分离成多个PromiseMaps并将它们链接起来,这是可能的吗?我还没有在网上找到任何描述限制线程池的内容。
//get requested calls
JSONArray callsToMake=request.JSON as JSONArray
//registers calls in promise map
def promiseMap = new PromiseMap()
//Can I limit this Map as a thread pool to, say, run 10 at a time until finished
data.each {
def tempVar=it
promiseMap[tempVar.id]={makeCall(tempVar.method, "${basePath}${tempVar.to}" as String, tempVar.body)}
}
def result=promiseMap.get()
def resultList=parseResults(result)
response.status=HttpStatusCodes.ACCEPTED
render resultList as JSON
我希望有一个相当直接的设置,我可能是无知的。
- 谢谢-谢谢
3条答案
按热度按时间ycggw6v21#
Grails中默认的异步实现是GPars。要配置线程数,需要使用GParsPool。请参见:
http://gpars.org/guide/guide/dataParallelism.html#dataParallelism_parallelCollections_GParsPool
示例:
lvmkulzt2#
withPool似乎不工作。只是以防万一,如果有人正在寻找限制线程这里是我所做的。我们可以创建一个自定义组与自定义线程池,并指定线程的数量。
3j86kqsm3#
用途
在构建.gradle和
例如在您的服务中