メモリが多すぎる場合はScala Futureは何も返さない
-
26-12-2019 - |
質問
Scala-IDE 3.0.3(Scala 2.10.4に基づく)、次のコードは、将来、List
Messageと同様に、計算されたFuture completed
の最初の10値を将来から表示することで正しく完了します。
import scala.concurrent._
import scala.concurrent.duration._
import scala.util.{Failure, Success}
import ExecutionContext.Implicits.global
object FutureNonBlocking extends App {
val f1: Future[List[Int]] = future {
val t = List.range(1, 50).filter(_ % 2 == 0)
println("Done")
t
}
f1.onComplete {
case Success(value) => println(value.take(10))
case Failure(e) => println("Something bad happened")
}
Await.complete(f1, 30 seconds)
}
.
しかし、List.range(1, 50)
への範囲をList.range(1, 5000)
に変更すると、何も表示されず(Failure
はトリガーされません)。論理的には、メモリの問題に関連しているようですが、そこで起こっているのか理解できません。
見知らぬ人でも、このコードをREPLで実行していると問題が発生しません。私はそこに何がありませんか?
解決
一般的なものは、Futures
でのメモリ管理に関する問題ではなく、並行プログラムのためのコンソール出力をハンドリングする方法に関連しています。
プログラムの最後にThread.sleep(1000)
を追加すると、Eclipseがすべてのコンソール出力を表示し、問題を解決します。
あなたのとても親切なコメントをありがとうございました!
所属していません StackOverflow