【问题标题】:AskTimeoutException: Timed out - Play Framework 2.1AskTimeoutException:超时 - Play Framework 2.1
【发布时间】:2013-10-26 22:41:45
【问题描述】:

我正在 Play 框架中开发一种元启发式算法,并且必须有无限期的超时。加载一个小时后,我收到以下错误:

[AskTimeoutException: 超时]

! @6g40d7af9 - Internal server error, for (GET) [/planificar] ->

play.api.Application$$anon$1: Execution exception[[AskTimeoutException: Timed out]]
    at play.api.Application$class.handleError(Application.scala:289) ~[play_2.10.jar:2.1.1]
    at play.api.DefaultApplication.handleError(Application.scala:383) ~[play_2.10.jar:2.1.1]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anon$2$$anonfun$handle$1.apply(PlayDefaultUpstreamHandler.scala:144) ~[play_2.10.jar:2.1.1]
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anon$2$$anonfun$handle$1.apply(PlayDefaultUpstreamHandler.scala:140) ~[play_2.10.jar:2.1.1]
    at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) ~[play_2.10.jar:2.1.1]
    at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) ~[play_2.10.jar:2.1.1]
    at play.api.libs.concurrent.PlayPromise$$anonfun$extend$1$$anonfun$apply$1.apply(Promise.scala:104) ~[play_2.10.jar:2.1.1]
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) ~[scala-library.jar:na]
    at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) ~[scala-library.jar:na]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) ~[na:1.7.0_25]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) ~[na:1.7.0_25]
    at java.lang.Thread.run(Thread.java:724) ~[na:1.7.0_25]
akka.pattern.AskTimeoutException: Timed out
    at akka.pattern.PromiseActorRef$$anonfun$1.apply$mcV$sp(AskSupport.scala:310) ~[akka-actor_2.10.jar:na]
    at akka.actor.DefaultScheduler$$anon$8.run(Scheduler.scala:193) ~[akka-actor_2.10.jar:na]
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:137) ~[akka-actor_2.10.jar:na]
    at scala.concurrent.forkjoin.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1417) ~[scala-library.jar:na]
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:262) ~[scala-library.jar:na]
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:975) ~[scala-library.jar:na]
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1478) ~[scala-library.jar:na]
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104) ~[scala-library.jar:na]

有什么办法可以解决这个问题吗? 谢谢。

编辑:

这是我的控制器

public static Result planificar() {
        Carga.cargarGlobales();
        Moacs moacs = new Moacs(cargarParametros());
        moacs.ejecutar(); // metaheuristics algorithm
        List<Solucion> soluciones =  moacs.getConjuntoPareto();            
        return ok(soluciones);
    }

【问题讨论】:

    标签: playframework timeout playframework-2.1


    【解决方案1】:

    您应该将其设为异步控制器:http://www.playframework.com/documentation/2.2.x/JavaAsync

    【讨论】:

    • 谢谢,async 让我的算法变慢了(我不知道为什么),但现在可以正常工作了。
    • 这很奇怪。它不应该更慢。
    【解决方案2】:

    您可以将 Timeout 设置为一个非常大的值。从 Scala documentation 来看,FiniteDuration 的范围仅限于 +-(2^63-1)ns,大约是 292 年。

    例如,可以这样做:

    (someActor ? someMsg)(365 Days).map { x => .... }
    

    【讨论】:

    • 您好,感谢您的回答,但我可以在哪里以及如何更改时间限制?
    • 鉴于您最近的编辑,James Ward 的回应正是您所需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 2013-02-10
    • 2013-01-06
    • 1970-01-01
    • 2017-09-03
    • 2012-11-08
    相关资源
    最近更新 更多