Scala并行处理

问题描述 投票:1回答:1

我正在编写一个代码,该代码将从元数据仓库中获取数据库表的列表,并按照元数据存储库中的配置在源数据库和目标数据库之间移动数据。以下是我的要求: -

  1. 并行处理列表中的每个表,并在源和目标之间移动数据。
  2. 生成将通过电子邮件发送的报告,该报告将包含有关哪些表已成功移动以及哪些表已失败的信息。

下面是代码的示例实现。方法futureCalc将具有移动数据的实现。以下是我的问题: -

1.为了发送电子邮件报告,我是否需要使用Async.result作为阻止会话来获取报告列表,或者是否有非阻塞方式来实现此目的?

2.我已经在多个论坛中读过应该使用Callback而不是阻塞API,是否在与主线程分开的线程中异步调用回调?

import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
import scala.util.Success
import scala.util.Failure
import scala.async.Async._

object test extends App {
  def futureCalc(i:Int):Int = {
    val sleeptime = i*60
    println("This is start of thread:"+i)
    Thread.sleep(sleeptime)
    println("This is after sleep :"+i)
    if (i<4)
      i*i
    else
      throw new RuntimeException("Bad thing")
  }

  val iniList   = List(1,2,3,4)
  val resultList = iniList map (i => Future{futureCalc(i)})

  resultList map  (i => {while(!i.isCompleted){
    i.onComplete {
      case Success(j) => println("No Issues")
      case Failure(ex) => println("Something went wrong ")
    }
  }
  }
    )

}
scala
1个回答
1
投票

如果您说Scala和数据库,请使用Lightbend的SLICK。结果是期货,可以像这样执行:

val q2 = for {
  c <- coffees if c.price < 9.0
  s <- suppliers if s.id === c.supID
} yield (c.name, s.name)`

请参阅Slick文档。

© www.soinside.com 2019 - 2024. All rights reserved.