如何在并行 Scala 中运行不同的函数
Posted
技术标签:
【中文标题】如何在并行 Scala 中运行不同的函数【英文标题】:How to Run Different Functions in Parallel Scala 【发布时间】:2021-06-27 04:50:21 【问题描述】:如何并行运行返回不同数据类型的两个不同函数?
这里有fruitFutures 和primeFutures。如何使用 Await.result 函数?
val fruits = List("apple", "orange", "mango", "banana")
val primeNums = List(2,3,5,7,11)
def executeFruit(fruit: String): Try[String] =
Try
s"executed $fruit"
def executePrime(prime: Int): Try[Int] =
Try
prime * 2
val fruitFutures: List[Future[Try[String]]] = for
fruit <- fruits
yield
Future
executeFruit(fruit)
val primeFutures: List[Future[Try[Int]]] = for
prime <- primeNums
yield
Future
executePrime(prime)
val futureResults = Await.result(Future.sequence(???), Duration.Inf)
【问题讨论】:
future.sequence(fruitFuture ++ primeFuture).map( //做你的事) 谢谢,但它给了我Product with Serializable
,所以不知道如何使用它。
Future[Try[..]]
说不通
【参考方案1】:
你可以试试这个:
val futureResults = for
f <- Future.sequence(fruitFutures)
p <- Future.sequence(primeFutures)
yield (f, p)
val (fruitResult, primeResult) =
Await.result(futureResults, Duration.Inf)
这将导致:
List(Success(executed apple), Success(executed orange), Success(executed mango), Success(executed banana))
List(Success(4), Success(6), Success(10), Success(14), Success(22))
【讨论】:
以上是关于如何在并行 Scala 中运行不同的函数的主要内容,如果未能解决你的问题,请参考以下文章
如何异步运行函数以使用 Django 应用在 Heroku 上并行计算?
如何在基于 C# 的 Windows 服务中处理以不同时间间隔并行运行的多个任务?