如何在并行 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 服务中处理以不同时间间隔并行运行的多个任务?

如何在 Scala 中使用 Stream.cons 编写不泄漏的尾递归函数?

Scala:如何通过函数对象参数实现签名不同的通用流程?

PostgreSQL:如何在函数中并行运行查询?

使用不同的参数并行运行相同的函数,并知道哪个并行运行在 python 中结束了