問題タブ [google-app-engine-python]
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.
google-app-engine - Google App Engine の割り当て
アプリケーションで Google Cloud Pub/Sub を使用する予定です。Google App Engine プロジェクトで Pub/Sub API を有効にすると、ユーザーごとに 10,000 のパブリッシャー オペレーションと 20,000 のサブスクライバー オペレーションが表示されます。アプリに Google サインインを使用していません。では、これらのクォータはどのように判断されるのでしょうか?
これとは別に、私の Google Cloud DataStore API ショーは、1 日あたり 1 億リクエストの無料クォータを示しています。また、ドキュメントによると、無料アプリでは 50,000 回の書き込み操作、50,000 回の読み取り操作、および 50,000 回の小さな操作しか実行できません。両者をどう理解するか。
python - アプリ エンジン (python) はどのようにリクエスト全体でメモリを管理しますか (ソフト プライベート メモリ制限を超えました)
Exceeded soft private memory limit
App Engine のさまざまなリクエスト ハンドラで時折エラーが発生します。このエラーは、インスタンスで使用されている RAM が割り当てられた量を超えたことを意味し、それが原因でインスタンスがシャットダウンすることを理解しています。
エラーの考えられる原因を理解したいと思います。まず、アプリ エンジンの Python インスタンスがメモリを管理する方法を理解したいと思います。私の初歩的な仮定は次のとおりです。
- F2 インスタンスは 256 MB から始まります
- 起動すると、アプリケーション コードが読み込まれます - 30 MB としましょう
- リクエストを処理するとき、226 MB が利用可能です
- そのリクエストが 226 MB (+ エラーのマージン) を超えない限り、リクエストはエラーなしで完了します
- 226 MB + マージンを超えた場合、インスタンスはリクエストを完了し、「ソフト プライベート メモリ制限を超えました」というエラーをログに記録してから終了します。ステップ 1 に戻ります。
- そのリクエストが返されると、それによって使用されていたメモリが解放されます。未使用の RAM は 226 MB に戻ります
- インスタンスにリクエストが渡されるたびに、ステップ 3 ~ 4 が無期限に繰り返されます。
それがうまくいくと私が推測した方法ですが、かなり幅広いリクエストハンドラーのセットでこのエラーが時々見られることを考えると、今はよくわかりません. 私の質問は次のとおりです。
a) ステップ 4 は実行されますか?
b) それが起こらない原因は何ですか? または完全に起こらない?たとえば、リクエスト間でどのようにメモリ リークが発生する可能性があるでしょうか。
c) モジュール レベル変数のストレージがメモリ使用量のリークを引き起こす可能性はありますか? (私は故意にモジュールレベルの変数をそのように使用していません)
d) より多くのデータを取得するには、どのようなツールや手法を使用できますか? たとえば、要求ハンドラへのエントリでメモリ使用量を測定しますか?
回答/コメントでは、可能であれば、gae ドキュメントにリンクしてください。
[編集] 追加情報: 私のアプリはthreadsafe: false
. これが答えに関係している場合は、それが何であるかを述べてください。threadsafe: true
近々乗り換える予定です。
[編集]明確化:この質問は、メモリ管理のための gaeの予想される動作に関するものです。そのため、'call gc.collect()
' のような提案は、関連する問題の部分的な解決策になる可能性がありますが、この質問に完全に答えるわけではありません。gae がどのように動作することが期待されるかを理解するまでは、使用gc.collect()
はブードゥー教のプログラミングのように感じます。
最後に:これがすべて逆になっている場合は、事前に謝罪します-これに関する有用な情報があまり見つからないため、ほとんど推測しています..
python - Google App Engine Datastore にソケット オブジェクトを保存する方法 (別名、ソケット オブジェクトをピクルできますか)
GAE Python ベースのアプリで Socket オブジェクトを datastore/memcache に保存する必要があります。
私が取っているアプローチは次のとおりです。 1. pickle.dumps を使用してソケット オブジェクトを文字列に変換します 2. 必要な場合は、この文字列を取得し、pickle.loads(<pickledSock>)
以下に完全なエラー メッセージを示しますが、主な部分は次のとおりです。
これは、「解凍」が機能しないため、上記のアプローチを使用できないということですか?
python - Google App Engine Python: 同じページにリダイレクトしてテーブルをリロードする
フォームに情報を入力する html ページがあり、送信ボタンをクリックすると、ページがリダイレクトされ、新しい情報でテーブルが更新されます。「self.redirect('/')」を使用すると、すべてがリロードされましたが、ページを手動で更新しない限り、テーブルは更新されませんでした。以下は私のコードです:
ここで私が間違っていることはありますか?
google-app-engine - ndb.toplevel と ndb.transactional の相互作用
と仲良く@ndb.toplevel
遊べる@ndb.transactional
でしょうか?
私が達成したいのは、entity.put_async()
呼び出しを含むトランザクションですが、先物を明示的に待つ必要がないという便利さです。@ndb.toplevel
通常はこれを行いますが、別の SO の質問は、トランザクションと組み合わせることはできないことを示唆しているようです: 「ndb トップレベルはトランザクションを壊しますか?」
これは、App Engine のドキュメントのどこにも明示的に文書化されているのを見つけることができません。put_async()
その質問に示されているアサーション エラーを再現することはできますが、呼び出しが失敗して問題がないかどうかを確認するためにいくつかのテストを作成しました。ただし、データが失われる可能性があるため、ndb をよく知っている人からここでより具体的な回答を得るとよいでしょう。
簡単なテスト コードを以下に示します。ndb.toplevel
とndb.transactional
デコレータの両方を削除すると、予想どおり、テストは失敗します。ただし、デコレータのみを使用してndb.transactional
デコレータを省略したndb.toplevel
場合、テストはパスしますが、これは予期されていません。ndb.transactional
これは、呼び出しが完了するのに十分な時間があるのに十分なオーバーヘッドがあるだけでput_async()
、保証がないので、予期せずに失敗する可能性があるのではないかと心配しています。
google-app-engine - モデル _post_put_hook を選択的にトリガーする
一部の検索インデックスを更新する ndb モデルに _post_put_hook をセットアップしました。これにより、データのインポートとアトミック更新が簡素化されます。しかし、インデックス作成アクションをトリガーせずに、そのモデルの特定のプロパティを更新したい場合が 1 つあります。
だから私はどちらかを探しています:
- _post_put_hook で使用できるある種のフラグ、または:
- その put() でどのモデルのプロパティ/値が変更されたかを知る方法で、インデックスを更新するかどうかの条件を追加できます。
ありがとう!
python - Python Google App Engine のファイル アップロードの例
Google の Python blobstore example codeを試してみましたが、アップロードされたファイルが表示されない /_ah/upload/ の空白のページにリダイレクトされるだけです。このコードで実行する必要があるものは他にありますか、または誰かが実際の例を持っていますか? 開発サーバーと完全展開の両方を試しました。
django - gcloudの更新後にDjangoモジュールを使用してGoogle App Engineをデプロイしますか?
Django 1.7 を使用して GAE にデプロイしています (これを のシンボリック リンク モジュールとして送信していますvirtualenv
)。gcloud
ツールの最新の更新まではすべて問題ありませんでした。
実行すると、次のよう$ gcloud preview app deploy app.yaml
になります。
これは、独自のバージョンの Django をアップロードしたことが関係していると推測していますが、これを解決する方法がわかりません。古いバージョンのgcloud
ツールを搭載したコンピューターを使用してみましたが、Too many files (limit is 10,000)
エラーが発生します。
この問題を最新のもので克服する方法についてのヒントはありますgcloud
か? ありがとう!