問題タブ [task-queue]
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.
python - Python プライオリティ キューの作成
Python で優先度キューを作成したいと思います。このキューには、優先度番号を持つさまざまな辞書が含まれています。したがって、「get 関数」が呼び出されると、優先度が最も高い (最小の番号) を持つ辞書がキューから取り出され、「関数の追加」が呼び出されると、新しい辞書がキューに追加され、それに基づいて並べ替えられます。優先番号。
助けてください...
前もって感謝します!
google-app-engine - App Engine - Mapper API を使用したタスク キューの再試行回数
これが私がやろうとしていることです: 新しい Mapper API で MapReduce ジョブをセットアップしました。これは基本的にうまくいきます。問題は、タスク キューが失敗したすべてのタスクを再試行することです。しかし、実際には、彼にそうしてほしくありません。キューからタスクを削除する方法や、タスクが正常に完了したことを伝える方法はありますか? おそらく 200 ステータス コードを渡しますか?
X-Appengine-Taskretrycount を取得できることはわかっていますが、タスクを停止する方法がわからないため、あまり役に立ちません。try .. except ブロックで「パス」を使用しようとしましたが、それも機能しませんでした。
どんな助けでも大歓迎です:)
ありがとう、クリス
google-app-engine - Google App Engine: タスク キューのbucket_size パラメータ
Bucket_size パラメータに関する Google ドキュメントには、簡単な定義、ウィキペディアへのリンク、および例が示されています。
バケットサイズ
キューの処理のバースト性を制限します。
つまり、バケット サイズが大きいほど、キューの実行レートのスパイクが大きくなります。たとえば、レートが 5/s でバケット サイズが 10 のキューを考えてみましょう。そのキューがしばらく非アクティブであり (「トークン バケット」がいっぱいになるのを許す)、20 個のタスクが突然キューに入れられた場合、キューは次のようになります。すぐに 10 個のタスクを実行できます。しかし、次の 1 秒では、トークン バケットが使い果たされ、指定された 5/s のレートで補充されているため、あと 5 つのタスクしか実行できません。
Bucket_size
パラメータの説明と、このパラメータがどのように役立つかを教えてください。
google-app-engine - コード内から Google App Engine タスク キューのタスクをキャンセルする方法
コンマ区切りのリストを取得してバッチジョブを作成するGAEアプリに取り組んでいます。特定の時間に任意の 1 つのバッチ ジョブから 1 つのタスクをタスク キューに追加したいと考えています。これの問題は、タスクを実行できない場合、そのタスクが永遠に繰り返され、残りのタスクがキューに追加されないことです。実行回数が多すぎる場合に、コード内からタスク キュー内のタスクを強制終了できる方法はありますか?
.net - このマルチスレッドの問題に対してどのアプローチを取るべきですか?
短い質問:
キューに送信された作業項目を処理する単一のバックグラウンド スレッドを生成したいと考えています (1 つのスレッドを持つスレッドプールなど)。作業項目には、進行状況を報告できるものとできないものがあります。.NET の無数のマルチスレッド アプローチのうち、どれを使用する必要がありますか?
長い説明(意味をなさない半分について尋ねるのを避けるため):
私の winforms アプリケーションのメイン ウィンドウは、縦に 2 つに分割されています。左半分には、アイテムを含むツリービューが含まれています。ユーザーがツリービュー内の項目をダブルクリックすると、その項目が右半分に開かれます。ほとんどすべてのオブジェクトには、複数のセクション (タブで表される) に分割された多数のプロパティがあります。これらのプロパティの読み込みにはかなりの時間がかかり、通常は約 10 秒、場合によってはそれ以上かかります。また、時々プロパティが追加されるため、時間が長くなります。
現在、私のシングルスレッド設計では、UI が応答しなくなります。当然、これは望ましくありません。バックグラウンドでパーツごとにロードし、パーツがロードされるとすぐに使用できるようにしたいと思います。他の部分については、ローディング アニメーションなどを含むプレースホルダー タブを表示します。また、1 回の長いモノリシック操作で読み込まれる部分もあれば、多数の小さな関数呼び出しと計算で構成される部分もあるため、読み込みの進行状況を表示できます。これらの部分については、進捗状況を確認できれば幸いです (特に、どこかにぶら下がっている場合)。
データ ソースはスレッド セーフではないため、2 つの部分を同時に読み込むことはできません。
この動作を実装するには、どのようなアプローチが最適でしょうか? 私の肩からいくつかの作業を持ち上げる.NETクラスはありますか、それとも単に降りて汚れるべきThread
ですか?
AThreadPool
は作業項目のキュー管理を行いますが、進行状況を報告する機能はありません。BackgroundWorker
一方、進行状況レポートをサポートしていますが、これは単一の作業項目を対象としています。おそらく両方の組み合わせはありますか?
java - 洗練されたJavaWorkQueueAPIはありますか?
次の機能を提供するWorkQueueAPIを探しています。
java.util.Queue
互換性- オファー(オプション)セットセマンティック
- 単一およびバッチ処理
- 並行性(もちろん)
- スケジューリング
- さまざまな処理ポリシー
- 次のスケジュールされた実行まで待つ
- バッチサイズが満たされた場合、前処理
- 処理の遅延(処理される前のキュー内の最小時間)
- 永続性(オプション)
jdkには興味深い実装がたくさんあります。たとえばjava.util.DelayQueue
、私が使用できるものなどです。車輪の再発明をしていないことを確認したかっただけです。
php - PHPによる非同期処理-ジョブごとに1つのワーカー
一般的な非同期ジョブを開始するユーザー要求を受け入れ、ジョブを実行するためのワーカープロセス/スレッドを作成することを目的としたPHPWebアプリケーションについて考えてみます。ジョブは特にCPUやメモリを集中的に使用しませんが、I/O呼び出しをかなり頻繁にブロックすることが予想されます。1秒間に開始するジョブは1つか2つまでですが、実行時間が長いため、一度に多くのジョブが実行される場合があります。
したがって、ジョブを並行して実行することが最も重要です。また、各ジョブは、ハングしたワーカーの強制終了、ユーザーの要求に応じたワーカーの中止などを担当するマネージャーデーモンによって監視される必要があります。
このようなシステムを実装するための最良の方法は何ですか?私は見えます:
- マネージャーからワーカーをフォークする-これは最低レベルのオプションのようであり、私は自分で監視システムを実装する必要があります。ApacheはWebサーバーであるため、このオプションでは、PHPワーカーをFastCGI経由で起動する必要があるようです。
- ある種のジョブ/メッセージキューを使用します。(gearman、beanstalkd、RabbitMQなど)-当初、これは当然の選択のように思われました。いくつかの調査の後、私はすべてのオプションと多少混乱しています。たとえば、Gearmanは、ワーカーの固定プールがある巨大な分散システム用に設計されているように見えます...したがって、必要なもの(ジョブごとに1人のワーカー)に適しているかどうかはわかりません。
c# - 単一のブロックされたタスクによるジョブ キューでの待機時間を回避するための標準パターンはありますか?
実行中のタスクの基本的なキューがあります (3 つの別々のシステムと通信する c# WinForms アプリ)。Web サービスの 1 つが通常の速度で応答しないことを決定するまで、すべてが優れています。
ジョブをマルチスレッド化して高速化することに興味はありませんが、本番環境で使用しているので、少なくとも 2 つのスレッドでジョブを実行することの利点がわかります。トラックインを維持し、両方がブロックされた場合、おそらく任意の数のスレッドがブロックされ、私はそれを処理します。
質問は、これは私が今説明した一般的なパターンですか、そのパターンの名前、および/または素晴らしい参照またはフレームワーク、または車輪を再発明しないようにするのに役立つものはありますか?
コメント/回答に基づく追加
タスクは同時に実行できます。私はスピードのためにマルチスレッド設計を精査しないことを選択しましたが、まれなタスクの待ち時間に直面して一貫したパフォーマンスを達成するためにそれを検討しています.
私の推測では、Web サービスへの呼び出しは、例外的ではないと見なされていても、完了までに不釣り合いなほど長い時間がかかることがあります。これは、平均実行時間が 1 秒 (さまざまな Web サービス呼び出しのホストを含む) で、Web サービスにかかる時間の 0.0001% である場合、たとえば N 個のジョブの合計実行時間に (修正済み) 無視できない影響を与えます。応答するのに15秒。
スレッド プールは、「ワーカー スレッドをスピンアップし、その状態を手動で管理する」という別の言い方ですか? または、複雑さを管理するのに役立つものはありますか? この場合、バグを導入する可能性が利益に比例しなくなるのではないかと心配しています...
スレッド プールに似たものを探していると思いますが、レイテンシが検出されたときにのみ追加のスレッドをスピンアップするものです。
コメントの 1 つが仕事を盗むスレッドと呼ばれるものについて、誰かが私にもっと情報を提供できれば、それは有望に思えます。
私が BackgroundWorker コンポーネントを使用しなかった理由は、必要なワーカーの数がわかっている場合に合わせて構築されているように見えるためです。理想的には設計を柔軟に保ちたいと思います
PS: ありがとうございます。ありがとう!
python - タスクが30秒の制限に近づくと、App Engineはどの例外を発生させますか?
タスクキューからPythonAPIの概要:
タスクの実行が30秒の制限に近づくと、App Engineは例外を発生させ、それをキャッチして、作業またはログプロセスをすばやく保存します。
それはどの例外ですか?
google-app-engine - GAE のタスク リストにアクセスするにはどうすればよいですか?
GAE の TaskQueue API を使用して HTML ページのキャッシュを更新することを計画しています。キャッシュはデータストア (および memcache) に保存されますが、データストアの方が信頼性が高くなります。
週に一度、いくつかのデータを追加/編集し、関連する HTML ページを再生成する必要があり、タスクをトリガーするのがその方法です。
編集内容が異なると、キャッシュされた同じページが変更される可能性があることに注意してください。たとえば、ホームページには、さまざまなデータのいくつかの部分のスニペットがあります。私が望むのは、いくつかの編集を蓄積できるように (たとえば、1 時間のカウントダウンを使用して)遅延してタスク キューにタスクを起動することです。最終的に、キャッシュされたページは 1 回だけ再生成されます。
問題は、1 時間以内にページ X を再生成するタスクが既にキューに入れられている場合、ページ X を再生成するタスクを追加する必要がないことです。したがって、タスク リストをチェックして、既に存在するかどうかを確認する必要があります。
タスク リストにアクセスするにはどうすればよいですか?