問題タブ [pull-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.

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

google-app-engine - gae プル キューの lease_tasks() はブロッキング メソッドですか?

Google App Engine にプル キューがあり、プル キュー内のタスクを処理する常駐バックエンドがあります。Google Cloud Platform ブログの投稿で提案されているように、バックエンドには、タスクを消費して処理するための複数のワーカー スレッドがあります。

https://cloud.google.com/resources/articles/ios-push-notifications

ワーカーは、lease_tasks() でプル キューをポーリングします。私の質問は次のとおりです: lease_tasks() はブロッキング メソッドであるはずですか。つまり、キューにいくつかのタスクがあるか、期限を超えるまで現在のスレッドの実行をブロックしますか?

GAEのドキュメントによると

https://developers.google.com/appengine/docs/python/taskqueue/overview-pull#Python_Leasing_tasks

lease_tasks() は「deadline」パラメーターを受け入れ、DeadlineExceededError を発生させる可能性があるため、leas_tasks() が「deadline」秒までブロックすると仮定するのは合理的ではありませんか?

問題は、開発サーバーでアプリケーションを開発しているときに、lease_tasks() がすぐにタスクの空のリストを返すことです。その結果、ワーカー スレッドの while ループは常に lease_tasks() を呼び出し、CPU を 100% 消費します。たとえば 5 秒間、明示的な sleep() を設定すると、ワーカーはスリープ状態になり、その間にタスクがキューに配置されても起動しません。これにより、ワーカーの応答性が低下し (最悪の場合、次のタスクの処理に 5 秒以上かかる場合があります)、スレッド ブロックを「キュー」に入れるよりも多くの CPU を消費します (ウェイク アップ -> スリープ サイクル)。 (プルキューが実際にはRPCであることは知っていますが、抽象的にはプロデューサーキューのままです)

おそらく、これは、GAE lease_tasks() ブロック内で開発アプリ サーバーでのみ発生します。ただし、上記のブログ投稿のサンプル コードでも、sleep() を使用してスレッドの実行を一時停止しています。サンプル コードは github で入手でき、リンクはブログ投稿にあります (残念ながら、ここに投稿することはできません)。

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

google-app-engine - App Engine プル キューの期限切れのタスクが再度リースされると削除される

サンプルのプル キューを追加し、サーブレットを介してプル キューに遅延タスクを追加しました。

もう 1 つのサーブレット (Lease Servlet) をリース タスクに追加しました。これは、1 つのタスクを 5 分間リースし、リースしたタスクの数を出力するだけです。

ここで、期限切れの時間 (つまり 5 分) 内に Lease Servlet にリクエストを送信して確認しましたが、リースされたタスクは 0 で問題ありません。

しかし、5 分後にタスクをリースすると、リースされたタスクが 0 になり、プル キューから削除されます。

これは予想される動作ですか?タスクがプル キューに戻って使用可能になると思いました。

私を助けてください。

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

google-app-engine - コンピューティング エンジンでのアプリ エンジン タスクのリース

コンピューティング エンジン インスタンスのプル キューからアプリ エンジン タスクをリースしようとしていますが、次のエラーが発生し続けます。

これは私が使用しているコードです:

認証の問題のようですが、でたらめに作られたプロジェクト名を使用して同じリース要求を行うと、まったく同じエラーが発生するため、確信が持てません。
また、タスクキューを有効にしてインスタンスを起動しました。
どんな助けでも大歓迎です

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

java - GAEプルキューのタグ名から残りタスク数を知る方法

java を使用してタグ名に基づいてタスクを追加するプル キューがあります。タグ名は、追加するタスクのグループごとに異なります。現在、groupbytag を使用してプル キューからタスクをリースしているときに、ランダムにタスクを取得していますが、そのタグ名のプル キューに残っているタスクの数を知る必要があります。

タグ名からタスク数を知ることはできますか?

0 投票する
0 に答える
166 参照

java - Google App Engine プル キュー

Google App Engine で Java ベースのアプリケーションを評価しています。

基本的にそのタスクで無期限に作業するワーカー (ほとんどの場合、マネージド VM) によってピックアップされるプル キュー内に特定のタスクを作成したいと考えています。タスクが確実に実行されるようにするために、そのワーカーにプル キューからタスクを 1 分間リースさせたいと考えています。

プル キューの相互作用を示すシーケンス図

その後、ワーカーがまだ生きている場合はリースを延長したいと思います(これにより、ワーカーが積極的に何かをしていることを確認できます)。

私の質問は次のとおりです。ワーカーを停止するために、ワーカーがリースを延長するのをブロックする可能性はありますか?

これが不可能な場合は、ワーカーに電話してタスクを削除させる必要がありますが、リースの延長をブロックすることができれば、削除する必要があるという事実に加えて、はるかにエレガントになります。とにかくその後のタスク

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

php - PHP Google App Engine アプリからプル キューにタスクを追加するにはどうすればよいですか?

PHP ベースの GAE アプリからプル キューにタスクを追加しようとしています。現時点では、プル キューは PHP をサポートしていないため、誰かがこの問題の解決方法を教えてくれることを期待していました。これまでのところ、次のことを試しましたが失敗しました。

1) TASK API を使用します。:

「403 エラー: この API 呼び出しを行うことは許可されていません」というメッセージが表示されました。

この API は、GAE の外部からのみ呼び出すことができます。

2) PHP 内で Shell_exec、exec、passthru、およびシステム コマンドを使用して Python スクリプトを実行し、プル キューにタスクを追加しました: 警告が表示されました

警告: セキュリティ上の理由から、/base/data/home/apps/s~apigraymatics/1.390159863933635324/public/pull/dummy1.php の 9 行目で exec() が無効になっています

これについて他に方法はありますか?ありがとう