[英]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.