私は数十万のタスクを(任意の順序で)実行する必要があります。それらをすべて実行するには数時間かかります。私はそれをスピードアップする良い方法を、それを並行して走らせることにしようと考えています。Groovyでループ反復を並行して実行しようとしています - エラーが発生する
ここではシングルスレッドだと正常に動作し、コードの最小限の再現だ:
doTask = { more ->
println("Start")
sleep 10000 // sleep 10 seconds
println("Finish")
}
(1..3).each{ more -> doTask(more) }
私はGroovyのとまったく経験がないので、この機能の構文は、私には少し外国人である...しかし、私は多くのことを発見人々はあなたがこのページをチェックすることを示唆したSOの質問の:
http://groovy.codehaus.org/Concurrency+with+Groovy
Linkrotが発生していない - そのページがもう存在しないが、私はここでのアーカイブを見つけた:
をhttps://web.archive.org/web/20150102212441/http://groovy.codehaus.org/Concurrency+with+Groovy
は私がそのページからの例を適応しようとしたし、これで終わった:
import java.util.concurrent.*
pool = Executors.newFixedThreadPool(3)
defer = {c -> pool.submit(c as Callable) }
doTask = { more ->
println("Start")
sleep 10000 // sleep 10 seconds
println("Finish")
}
(1..3).each{ more -> defer{doTask(more)} }
私はここにそれを実行すると:
: http://groovyconsole.appspot.com/が、私はこのエラーを取得します
java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup")
at Script1$_run_closure1.doCall(Script1.groovy:5)
at Script1$_run_closure3.doCall(Script1.groovy:12)
at Script1.run(Script1.groovy:12)
何が起こっているのですか?私は何とか文法を混乱させましたか?私はAPIを悪用していますか?これはおそらくそのウェブサイトの制限ですか?
他のマシンにあるVM上にスレッドを作成しようとしています。これは、サイトをダウンさせるために簡単に使用でき、Webコンソールの権限を削除しました。ローカルで実行してみてください。 –