Ограничение количества потоков в фреймворке Play 2.1

Я использую Play 2.1 со Scala для непрерывного запуска нескольких тестов. Я делаю Future.traverse(tests)(test => Future(runTest(test)).

Я хочу ограничить количество параллельных тестов, поэтому я хочу ограничить количество потоков в диспетчере по умолчанию.

я пытался поставить

play {
  akka {
    event-handlers = ["akka.event.slf4j.Slf4jEventHandler"]
    loglevel = WARNING
    actor {
      default-dispatcher = {
        fork-join-executor {
          parallelism-factor = 1.0
          parallelism-max = 2
        }
      }
    }
  }
} 

в application.conf, но, похоже, это не имеет никакого эффекта (когда я запускаю программу, все еще есть один поток на ядро). application.conf правильно читается для других настроек воспроизведения.

Я пытался избавиться от игры {} вокруг него, но это ничего не меняет.

Я безуспешно пробовал разные импорты контекстов выполнения:

//import scala.concurrent.ExecutionContext.Implicits._
import play.api.libs.concurrent.Execution.Implicits._

Когда я запускаю приложение, я получаю это сообщение, поэтому кажется, что используется диспетчер по умолчанию:

[info] play - Starting application default Akka system.

Кто-нибудь знает, почему я не могу настроить диспетчер по умолчанию?

Благодарю вас!

Список тем:

main
Reference Handler
Finalizer
Signal Dispatcher
FSEvent thread
Attach Listener
play-scheduler-1
Timer-0
com.google.common.base.internal.Finalizer
BoneCP-keep-alive-scheduler
BoneCP-max-alive-scheduler
BoneCP-pool-alive-scheduler
application-akka.actor.default-dispatcher-2
application-scheduler-1
ForkJoinPool-3-worker-1
default-scheduler-1
default-scheduler-1
default-scheduler-1
default-akka.actor.default-dispatcher-3
default-akka.actor.default-dispatcher-5
default-akka.actor.default-dispatcher-3
default-akka.actor.default-dispatcher-2
default-akka.actor.default-dispatcher-5
default-pinned-dispatcher-4
play-akka.actor.default-dispatcher-2
play-akka.actor.default-dispatcher-4
Timer-1
Timer-3
Timer-4
Hashed wheel timer #1
Hashed wheel timer #2
Hashed wheel timer #3
AsyncHttpClient-Reaper
AsyncHttpClient-Reaper
AsyncHttpClient-Reaper
default-pinned-dispatcher-4
default-pinned-dispatcher-4
New I/O boss #35
New I/O boss #44

И 8 play-internal-execution-context- (от 1 до 8)

И 8 iteratee-execution-context- (от 1 до 8)

И 62 New I/O worker # (от 1 до 62)


person Jacob    schedule 19.06.2013    source источник
comment
Прикрепить список тем?   -  person Viktor Klang    schedule 19.06.2013
comment
Да, можете ли вы прикрепить что-нибудь (может быть, скриншот), показывающее полный список потоков, запущенных в вашей JVM, когда вы запускаете тест? Вероятно, в вашей JVM запущено несколько ExecutionContexts...   -  person cmbaxter    schedule 19.06.2013
comment
Я только что добавил список тем. Я работаю на Intel i7, поэтому у меня 8 ядер (и я считаю, что значение по умолчанию для akka — один поток на ядро).   -  person Jacob    schedule 19.06.2013
comment
Я вижу два потока для play-akka.actor.default-dispatcher, значит, все работает правильно, нет?   -  person cmbaxter    schedule 20.06.2013
comment
Нет, это не то, что странно. У меня все еще есть 8 тестов, работающих параллельно с этой конфигурацией.   -  person Jacob    schedule 20.06.2013


Ответы (1)


Параметр, который вы забыли, это parallelism-min, который по умолчанию равен 8. Но прежде чем вы пойдете и измените его, подумайте о том, чтобы не использовать диспетчер по умолчанию для этой цели: ограничение его двумя потоками может привести к поломке системы. Я бы рекомендовал настроить конкретный диспетчер для использовать для вашего будущего.

person Roland Kuhn    schedule 24.06.2013
comment
Я уже пытался установить для параметра parallelism-min меньшее значение, и это ничего не изменило. С конкретным диспетчером мне больше не повезло, настройки тоже игнорировались. Наконец-то я использовал расписания для параллельного выполнения тестов. - person Jacob; 24.06.2013