問題タブ [worker-pool]

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.

0 投票する
3 に答える
13580 参照

python - Pythonのワーカープールを使用した非同期マルチプロセッシング:タイムアウト後も続行するには?

プロセスのプールを使用して多数のジョブを実行し、特定のタイムアウトを適用した後、ジョブを強制終了して、次のタスクに取り組んでいる別のジョブに置き換える必要があります。

multiprocessingワーカーのプールを非同期で実行する方法を提供するモジュールを使用しようとしましたが(例: を使用map_async)、「グローバル」タイムアウトしか設定できず、その後すべてのプロセスが強制終了されます。

時間がかかりすぎる単一のプロセスのみが強制終了され、代わりに新しいワーカーがプールに再度追加される (次のタスクを処理し、タイムアウトしたタスクをスキップする)個別のタイムアウトを設定することは可能ですか?

私の問題を説明する簡単な例を次に示します。

タイムアウト後、すべてのワーカーが強制終了され、プログラムが終了します。代わりに、次のサブタスクに進みたいと思います。この動作を自分で実装する必要がありますか、それとも既存のソリューションがありますか?

アップデート

ぶら下がっている労働者を殺すことができ、それらは自動的に置き換えられます。だから私はこのコードを思いついた:

ここでの問題は、ループが終了しないことです。すべてのタスクが処理された後でも、呼び出すgetとタイムアウト例外が発生します。

0 投票する
1 に答える
950 参照

java - Java wordcount: 平凡な実装

Java で wordcount プログラムを実装しました。基本的に、プログラムは大きなファイル (私のテストでは、数字のみを含む 10 GB のデータ ファイルを使用しました) を取り、各「単語」が出現する回数をカウントします。この場合、数字 (たとえば 23723ファイル内で 243 回)。

以下は私の実装です。主にパフォーマンスを念頭に置いて改善しようとしていますが、他のいくつかのことも同様に改善しており、いくつかのガイダンスを探しています. 修正したい問題のいくつかを次に示します。

  1. 現在、プログラムはスレッド化されており、適切に動作します。ただし、私が行っているのは、メモリのチャンク(500MB/NUM_THREADS)を各スレッドに渡すことであり、各スレッドは wordcount に進みます。ここでの問題は、各スレッドにさらにデータを渡す前に、すべてのスレッドが完了するのをメインスレッドに待機させることです。それほど大きな問題ではありませんが、いくつかのスレッドが待機してしばらくの間何もしない期間があります。ある種のワーカー プールまたはエグゼキューター サービスでこの問題を解決できると思います (この構文についてはまだ学習していません)。

  2. このプログラムは、整数を含むファイルに対してのみ機能します。それは問題だ。未使用の変数を大量に作成せずにデータを反復処理する方法がわからなかったため、これにかなり苦労しました(Stringを使用するか、StringBuilderを使用してもパフォーマンスが大幅に低下しました)。現在、入力が整数であることを知っているという事実を使用し、一時変数を として保存するだけなintので、メモリの問題はありません。区切り文字がスペースであろうと複数の文字であろうと、ある種の区切り文字を使用できるようにしたいと考えています。

  3. グローバルな ConcurrentHashMap を使用して、キーと値のペアをストーリー化しています。たとえば、スレッドが「24624」という数字を見つけた場合、マップ内でその数字を検索します。存在する場合、そのキーの値を 1 増やします。末尾のキーの値は、そのキーの出現回数を表します。それで、これは適切な設計ですか?各スレッドに独自のハッシュマップを与え、最後にそれらをすべてマージすると、パフォーマンスが向上しますか?

  4. クラス RandomAccessMemory を使用せずに、オフセットを使用してファイルをシークする他の方法はありますか? このクラスはバイト配列にのみ読み込まれるため、変換する必要があります。この変換のタイミングは計っていませんが、別のものを使用した方が速いかもしれません。

私は他の可能性にもオープンです。これはまさに頭に浮かぶものです。

注: ファイルを分割することは、検討したいオプションではありません。これは、独自のファイルを作成するべきではないサーバーに展開する可能性があるためですが、実際にパフォーマンスが向上する場合は、聞くかもしれません.

その他の注意: 私は Java スレッドと StackOverflow が初めてです。穏やかな。

0 投票する
1 に答える
471 参照

python - WorkerPool を使用して URL のリストをマルチスレッド化する

マルチスレッドを使用して、URL の txt ファイルを調べ、各 URL で見つかったコンテンツをスクレイピングしようとしています。これは約 20 個の URL で機能しますが (数は一定ではありません)、ファイルの最後の URL で一貫してスタックします。それらを順番に実行していないようです。

なぜ動かなくなったのか、どこから始めればよいのかわかりません。ご協力いただきありがとうございます。

URL のリストの例を次に示します。

0 投票する
1 に答える
4285 参照

go - ワーカープールの最適サイズ

私はゴルーチンの「ワーカープール」を使用するGoアプリを構築しています。最初に、プールを開始して多数のワーカーを作成します。4 コアの CPU など、マルチコア プロセッサの最適なワーカー数はいくつになるのだろうかと考えていました。現在、次のアプローチを使用しています。

完全な実装は以下にあります

job.NewWorkerPool(maxWorkers) および module.Dispatcher.Run(jobQueue)

ワーカー プールの使用例: リクエストを受け入れて複数の外部 API を呼び出し、それらの結果を 1 つのレスポンスに集約するサービスがあります。結果の順序は関係ないため、各呼び出しは他の呼び出しとは独立して実行できます。呼び出しをワーカー プールにディスパッチし、各呼び出しは 1 つの使用可能なゴルーチンで非同期に行われます。私の「リクエスト」スレッドは、ワーカー スレッドが完了するとすぐに結果を取得して集計している間、リターン チャネルをリッスンし続けます。すべてが完了すると、最終的な集計結果がレスポンスとして返されます。各外部 API 呼び出しは可変の応答時間をレンダリングする可能性があるため、一部の呼び出しは他の呼び出しよりも早く完了する可能性があります。

0 投票する
1 に答える
604 参照

go - 1 秒あたりの HTTP リクエストを制限するためのワーカー プールの実装

私は Go lang を初めて使用し、抑制された GCP API 呼び出しを実装しようとしています。つまり、アプリが行う 1 秒あたりの API 呼び出しの数を制限して、Google が私をブロックしないようにします。

ここに例示されているワーカープールのパターンに従っています。

リンクされた例に似た方法のデザインは次のようになります。

  • 実行する API 呼び出しの総数と同じ容量の 2 つのチャネル (ジョブ、結果) を作成します。
  • 特定のサイズ (たとえば 10 ワーカー) のワーカー プールを作成する
  • 各ワーカーは、API 呼び出しを行い、応答を結果チャネルに保存しながらジョブ チャネルを通過します。待機時間は 1 秒です。

私の質問は次のとおりです。

  • それぞれ 1 秒の待機期間を持つ 10 個のワーカーは、アプリが 1 秒あたり約 10 回の API 呼び出しを行うことを意味することを正しく理解していますか?
  • 10 個のワーカーが互いに足を踏み入れないように通信するにはどうすればよいでしょうか。つまり、2 つのワーカーが同じ GCS パスを照会することはありません。

そしてもちろん、最終的な質問: ワーカー プールを使用するのはやり過ぎですか?

ありがとうございました!