問題タブ [gpars]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
groovy - GPars は多数の非同期関数のステータスを報告し、完了を待ちます
パーサーがあり、行のデータを収集した後、メイン スレッドが続行して次の行を取得している間に、aync 関数を起動して行を処理させたいと考えています。
この投稿を見たことがあります: Groovy で 2 つのタスクを同時に実行し、結果を待つにはどうすればよいですか? しかし、それが私の状況に最適な解決策であるかどうかはわかりません。
私がやりたいことは、すべての行が読み取られた後、すべての非同期関数が完了するのを待ってから先に進むことです。Promise のコレクションを使用する際の懸念事項の 1 つは、リストが大きくなる可能性があることです (100,000 以上)。
また、進行状況を報告したいと思います。最後に、ファイルが巨大になる可能性があるため、(get() のように) タイムアウトを自動的に待ちたいかどうかはわかりませんが、ユーザーがさまざまな理由でプロセスを強制終了できるようにしたいと考えています。
したがって、今のところ行ったことは、解析された行の数を記録し ( rowReadを介して発生するため)、次のように Promise からのコールバックを使用して、処理が終了した別の行を記録することです。
ここで、 rowsProcessedは AtomicInteger です。
次に、シートの最後に呼び出されるコードで、すべての解析が完了し、処理が完了するのを待っている後、次のようにします。
良いことに、ここでは Promise オブジェクトの爆発はありません。チェックする単純なカウントだけです。しかし、頻繁にスリープすることが、各 Promise() オブジェクトで get() をチェックするのと同じくらい効率的かどうかはわかりません。
だから、私の質問は次のとおりです。
- 代わりに Promises のコレクションを使用した場合、上記の while ループを実行しているスレッドが Thread.interrupt() で中断された場合、get() は反応して戻りますか?
- Promise のコレクションを使用し、それぞれで get() を呼び出す方が、頻繁にスリープしてチェックするよりも効率的でしょうか?
- 私が考慮していない別のより良いアプローチはありますか?
ありがとう!
groovy - GParsforkOffChild例外処理
GParsのフォーク/ジョインを使用しています。forkOffChildを呼び出した後に例外をスローすると、それは埋め込まれます。
例えば:
ここでは、フラグを設定して、クロージャが再帰的に呼び出されていることを確認します。次に、「内部的に」キャッチされる例外をスローしますが、再スローは「外部的に」キャッチされることはありません。だから私は二股に分かれた子供が失敗したことに気づいていません。
例外ハンドラも試しましたが、呼び出されないようです。
これは予想される動作ですか、それとも私は何か間違ったことをしていますか?これを支援する戦略はありますか?私は子供を黙って失敗させることはできません。
ありがとう!
groovy - Groovy-GPars-ActiveObject-値を返すアクティブメソッド
MyCounter
Groovyでは、次のコードが渡されるように、と呼ばれるActiveObjectインスタンスを実装する必要があります。
私は以下にリストされた2つの実装を持ってきました-それらのどれも機能しません。
1.1。
ブロックしないための呼び出しincrementBy
、たとえばvalueプロパティ、したがって実際には、incrementBy操作が終了する前にcounter変数にアクセスするため、これは機能しないと思います。
2.2。
コンパイラは私にそれを教えてくれます:
非ブロッキングメソッドは特定のタイプを返さないでください。代わりにdefまたはvoidを使用してください
groovy - Groovy / Grails GPARS:2つの計算を並行して実行する方法は?
私はGPARSライブラリを初めて使用し、現在ソフトウェアに実装しています。
通常のGroovyの代わりに使用しても問題ありません-次のような方法
しかし、値を返す2つのタスクを並列化する方法を考えています。
GPARSがなければ、私は次のようにします。
しかし(どのように)これはGparsPoolで行うことができますか?
groovy - 例外がスローされたときにすべてのスレッドが終了したことをGParsでどのように知ることができますか?
例外をスローするスレッドの場合、例外をスローしなかったすべてのスレッドが終了するまでどのように待つことができますか(したがって、すべてが停止するまでユーザーは再度起動しません)?
私はGParsをいくつかの異なる方法で使用しているので、それぞれに戦略が必要です(並列コレクション、非同期クロージャ、およびフォーク/結合)。例外は埋もれておらず、promiseやgetChildrenResultsなどを介して適切に処理されるため、問題にはなりません(Vaclav Pechの回答に感謝します)。まだ実行中の何かが完了するか、そうでなければ停止されるまで、メインスレッドが待機することを確認する必要があります。
たとえば、並列コレクションを使用する場合、一部のスレッドは実行を継続しますが、例外後に起動しないスレッドもあります。ですから、何人が待っているのか、あるいはそれらを手に入れるのかを知るのは簡単ではありません。
私の推測では、スレッドプール(この場合はGParsPool)を操作する方法があるかもしれません。助言がありますか?
ありがとう!
gpars - GPars - 並列コレクションを早期に終了する適切な方法
並列コレクションを終了する最良の方法は何ですか (スレッドの 1 つによってスローされた例外、またはユーザーによって開始された割り込みの場合)?
どちらの場合でも、簡単にフラグを設定して、ループの先頭でチェックすることができました。しかし、コレクションに 10,000 個のアイテムがある場合は、それらを ForkJoinPool にフィードするものは何でも、それらのフィードを停止するように伝えたいと思います。すでに開始されている 5 つまたは 20 ほどのアイテムを終了させますが、それ以上開始しないでください。
これは、私が何を意味するかを確認するためにプラグインできるサンプルです。スレッドの 1 つによる例外のスローをシミュレートすると、スレッド カウントの最初の出力 (「A:」メッセージで) が非常に小さい (5 程度) ことが多いため、コレクションが処理を停止したように見えます。ただし、カウントを GParsPool.withPool の外 (「B:」) に出力すると、それらが実際に実行され続けていることがわかります (常にすべて 100)。
eachParallel 内で pool.shutdown() を使用しても、影響はありません。pool.shutdownNow() を使用すると、希望どおりに処理が終了しますが、CancellationException がスローされ、必要な実際の例外がわかりにくくなります。後でアクセスできるように、「実際の」例外を変数に保存することもできますが、並列コレクションに完全に停止するように指示するより良い方法がないかどうか疑問に思う必要があります。
grails - IntelliJとgrailsでGParsを使用しようとしています
IntelliJ Grailsプロジェクトで外部JAR、GParsを使用する際に多くの問題が発生しました。依存関係の指定に問題があると思います。GPars-1.0.0を使用しています。それをlibディレクトリに保存し、IntelliJGUI-プロジェクト構造->モジュール->追加を使用して依存関係として含めました。 同期しました。また、BuildConfig.groovyに直接追加してみました:
入力時にコードアシストが表示され、コンパイルされます。しかし、私が以下を実行すると:
ステートメント「GParsePool.withPool」に対してClassNotFoundExceptionメッセージjsr166y.ForkJoinPoolが表示されます
何か案は?BuildConfigで依存関係を正しく指定しましたか?私のコード例は間違っているかもしれませんが、この例に従っているようです。
concurrency - null を返す GPars ロック
テーブルの行をロックしようとすると、null が返されることがあります。どういう意味ですか?ロック前にドメイン インスタンスが null ではないことを確認します。
これは以下を出力します:
(「状態 1」は状態の文字列表現です)
hibernate - Grails、GPars、およびデータの永続性
何かが洗い流されていません。何が起こっているかの簡単な例:
これは以下を出力します:
データを永続化するためにセッションとトランザクションで何かをする必要があるのか 、それともこれが GPars のバグなのかわかりません。基礎となる休止状態レベルで何が起こっているのでしょうか?
最近作成された Person を並列クロージャー内に表示したいと思います。
java - JavaとGParsを比較する
私は、JavaとGParsの両方で視覚化するための同等のコードスニペットを見つけようとしています。これは、GParsがどれほど簡単かを示しています。
次のコードはどちらの場合も同じことをしますか?私は出力だけを意味するのではなく、「内部」で何が起こるかを意味します。それとももっと短くする方法はありますか?
Java:
Groovy: