eri*_*rip 3 parallel-processing scala future
Future我正在尝试并行运行一系列愚蠢的 Scala 。我有以下代码,预计需要 10 秒:
import scala.concurrent.Future
import scala.util.{Success, Failure}
import scala.concurrent.ExecutionContext.Implicits.global
def scalaFoo = Future {
Thread.sleep(10*1000) // sleep for 10 seconds
List(1,2,3)
}
def scalaBar = Future {
Thread.sleep(10*1000)
List(4,5,6)
}
def scalaBaz = Future {
Thread.sleep(10*1000)
List(7,8,9)
}
val flatRes: Future[List[Int]] = for {
scalaFooRes <- scalaFoo
scalaBarRes <- scalaBar
scalaBazRes <- scalaBaz
} yield (scalaFooRes ++ scalaBarRes ++ scalaBazRes)
flatRes onComplete {
case Success(li) => println(li.foldLeft(0)(_ + _))
case Failure(e) => println(e.getMessage)
}
Run Code Online (Sandbox Code Playgroud)
但我发现这onComplete需要大约 30 秒,所以我的作业是按顺序运行的。
我怎样才能让它们并行运行?为什么他们现在不并行运行?
小智 6
您还可以使用 Future.sequence:
def scalaFoo = Future {
Thread.sleep(3*1000) // sleep for 10 seconds
List(1,2,3)
}
def scalaBar = Future {
Thread.sleep(3*1000)
List(4,5,6)
}
def scalaBaz = Future {
Thread.sleep(3*1000)
List(7,8,9)
}
Future.sequence(List(scalaFoo, scalaBar, scalaBaz)).onComplete({
case Success(li) => println(li.flatten.sum)
case Failure(e) => println(e.getMessage)
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4663 次 |
| 最近记录: |