簡體   English   中英

並行運行Scala期貨

[英]Running scala futures somewhat in parallel

我有一些斯卡拉期貨。 我可以輕松地將它們與Future.sequence並行運行。 我也可以像這樣一個接一個地運行它們:

def serFut[A, B](l: Iterable[A])(fn: A ⇒ Future[B]) : Future[List[B]] =
  l.foldLeft(Future(List.empty[B])) {
    (previousFuture, next) ⇒
      for {
        previousResults ← previousFuture
        next ← fn(next)
      } yield previousResults :+ next
  }

在此描述)。 現在,假設我想稍微並行運行它們-即,約束條件是最多m個同時運行。 上面的代碼針對m=1的特殊情況執行此操作。 對於一般的m有沒有一種很好的scala習慣用法? 然后,為了獲得額外的實用性,在程序中實現kill-switch的最優雅方法是什么? 我可以即時更改m嗎?

我自己的解決方案使我重新回到過程代碼,而在Scala優雅的環境下,它顯得有些w弱。

您可以使用ExecutionContext (最多使用m線程的池)來實現此目的: 如何為期貨配置微調的線程池?

implicit val ec = new ExecutionContext { ...放置在serFut函數范圍內的某個位置,以便在創建期貨時使用它。

最簡單的方法是像這樣定義ExecutionContext

implicit val ec = ExecutionContext.fromExecutor(Executors.newFixedThreadPool(m))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM