【发布时间】:2014-11-24 10:52:09
【问题描述】:
我在 Scala 中生成了大量(~100.000)http-request 任务作为期货。这需要一段时间,所以我希望能够通过增加全局计数器来跟踪这些期货中有多少是成功完成或失败的。但是,我想避免竞争条件。 Scala 中是否有制作原子计数器的选项?还是有更好的方法?
代码如下所示:
val futures = for(i <- 0 until nSteps) yield future {
...
val content = blocking { ... http request ... }
process(content)
}
Await.result(Future.sequence(futures),2 hours)
【问题讨论】:
-
您是否想过“为什么”您的 Futures 可能会失败。如果您在很短的时间内收到所有回复怎么办。您是否有资源来处理(“处理”)您的回复?如果没有,您的 Futures 可能会因此而超时?
-
@SoumyaSimanta,我不认为很多人会失败。如果它们失败,很可能是因为服务器没有响应。我只是想跟踪进度。
-
期货可能不是你要找的东西。你有没有想过一个演员,对计算进行分析?这将允许您在不阻塞的情况下执行此操作,但可以解决同步问题。
标签: scala concurrency future scala-2.10