Skip to content

Instantly share code, notes, and snippets.

@diyan
Last active June 7, 2019 09:33
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/1636853c75483b7eb5386b3883e1e182 to your computer and use it in GitHub Desktop.
Save diyan/1636853c75483b7eb5386b3883e1e182 to your computer and use it in GitHub Desktop.
Boring but parallel loops in Scala using "for" keyword
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: 11/14/7/13/12/15 secs
// 1 Parallel For: 9/10/10/10 secs
// 2 Parallel For: 5/5/5/5/6 secs
// 3 Parallel For: 5/6/5/5/5 secs
for (ecsClusterArn <- ecs.listClustersPaginator().clusterArns().asScala.par) {
for (ecsServiceArns <- ecs.listServicesPaginator(ListServicesRequest.builder()
.cluster(ecsClusterArn)
.build())
.serviceArns().asScala.grouped(10).toParArray) {
for (ecsService <- ecs.describeServices(DescribeServicesRequest.builder()
.cluster(ecsClusterArn)
.services(ecsServiceArns.asJavaCollection)
.build())
.services().asScala) {
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