gpt4 book ai didi

scala - 并行运行 scala futures

转载 作者:行者123 更新时间:2023-12-04 19:54:03 27 4
gpt4 key购买 nike

我有一些 scala future 。我可以轻松地与 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
}

(描述 here )。现在假设我想稍微 并行地运行它们——也就是说,最多同时运行它们的m 约束。上面的代码针对 m=1 的特殊情况执行此操作。对于一般的 m,是否有一种很好的 scala 惯用方法?那么对于额外的实用程序,在例程中实现终止开关的最优雅的方法是什么?我可以即时更改 m 吗?

我自己的解决方案一直让我回到过程代码,与 scala 的优雅相比,它感觉相当软弱。

最佳答案

您可以通过使用 ExecutionContext 来实现它,它使用最大 m 线程的池: How to configure a fine tuned thread pool for futures?

implicit val ec = new ExecutionContext { ... 放在 serFut 函数范围内的某处,以便在创建 future 时使用它。

关于scala - 并行运行 scala futures,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30746586/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com