0

私のキュータスクはurlfetchを使用して外部APIからデータを取得し、それをndb Datastoreエンティティに保存します。アプリケーションエンジンTaskQueueタスクは、ユーザが直面するハンドラパフォーマンスに影響を与えます

合計約15秒かかります。

何らかの形で、タスクが実行されると、他のすべてのハンドラ(単純なjson応答ハンドラ)が遅くなります。 (遅い手段+ 500ms)

これを引き起こす原因は何ですか?

バックグラウンドタスクの考え方は、ユーザーが直面している要求には影響しません。

私はthis blogpostに遭遇しましたが、完了に1秒以上かかる。私はそれがどのように私を助けてくれるのか分かりません。

答えて

3

デフォルトでは、タスクはユーザーの要求に対応する同じインスタンスによって実行されます。バックグラウンドであろうとなかろうと、それらは同じCPU、メモリ、および帯域幅を共有します。これらのタスクを別のモジュール、つまり異なるインスタンスで実行することをお勧めします。タスクキューのターゲットを指定することで、これを実行できます。

通常、自動App Engineスケジューラは、現在のインスタンスからの応答が遅くなったときに新しいインスタンスを回転させることに注意してください。しかし、あなたのケースの減速は、標準的な要求の量が増えているのではなく、異常に長い要求になります。これにより、自動スケジューラが増加したレイテンシに反応するのを防ぎます。手動スケジューリングまたは基本スケジューリングに切り替えることができます。スケジューリングでは、容量(インスタンスの総数)および新しいインスタンスの回転に関するルールをより詳細に制御できますが、バックグラウンドタスク用に別のモジュールを作成する方が優れています。

+0

ありがとうございます!これは完全に機能します。 –