Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save diyan/4a83c02984e3c63dadcef917c3b6a1fb to your computer and use it in GitHub Desktop.
Save diyan/4a83c02984e3c63dadcef917c3b6a1fb to your computer and use it in GitHub Desktop.
Boring but parallel loops in Scala using "foreach" method
import java.util.concurrent.TimeUnit
import software.amazon.awssdk.services.ecs.EcsClient
import software.amazon.awssdk.services.ecs.model.{DescribeServicesRequest, ListServicesRequest}
import scala.collection.JavaConverters._
object EcsAutoScalingReport extends App {
val startTime = System.nanoTime()
var ecs = EcsClient.create()
// 92 services collected in
// Sequential for(...): 11/14/7/13/12/15 secs
// 1 for(...par): 9/10/10/10 secs
// 2 for(...par): 5/5/5/5/6 secs
// 3 for(...par): 5/6/5/5/5 secs
// 2 .par.foreach{}: 6/5/5/5/5 secs
ecs.listClustersPaginator().clusterArns().asScala.par.foreach { ecsClusterArn =>
ecs.listServicesPaginator(ListServicesRequest.builder()
.cluster(ecsClusterArn)
.build())
.serviceArns().asScala.grouped(10).toParArray.foreach { ecsServiceArns =>
ecs.describeServices(DescribeServicesRequest.builder()
.cluster(ecsClusterArn)
.services(ecsServiceArns.asJavaCollection)
.build())
.services().asScala.foreach { ecsService =>
println(ecsService.serviceName())
}
}
}
val timeTakenSec = TimeUnit.NANOSECONDS.toSeconds(System.nanoTime() - startTime)
println(s"DONE in $timeTakenSec secs")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment