2

名前空間を使用してデータを整理するGAEアプリケーションがあります。私の質問は、名前空間はスレッドごとに管理されているのか、それともインスタンスごとに管理されているのかということです。GAE構成でスレッドセーフを有効にした場合、1つのスレッドで名前空間を設定すると、他のスレッドに影響を与える可能性がありますか?

4

2 に答える 2

5

set_namespace()使用os.environ

def set_namespace(namespace):
    ...
    os.environ[_ENV_CURRENT_NAMESPACE] = namespace

os.environスレッドローカルストレージを使用するようにパッチが適用されています。

そうです、名前空間はスレッドセーフです。

于 2012-09-13T02:48:36.730 に答える
0

名前空間はGAE/Jではスレッドセーフのようです。

これは、次のことを行う単純なサーブレットを実行することによってテストされています。

  • 名前空間をクエリ文字列パラメータに設定します
  • 25秒間ループし、5秒ごとに名前空間をスレッドIDとともにログに記録します
  • 3つの異なる名前空間を使用してサーブレットを3回呼び出し、各呼び出しの間に10秒間休止します。

appengine-web.xmlで<threadsafe>true</ threadsafe>が設定されている場合、すべてのリクエストは同じインスタンスによって処理されました。これは、App Engineコンソールで実行中のインスタンスの数を調べ、各リクエストのログを調べることで確認されました。各ログエントリには、instance=00c61b117c8e9fd8aa8b02bff53de32a49b20eのようなエントリがあります。同じインスタンス内で、スレッドに名前空間を設定しても、他のスレッドの名前空間には影響しません。

構成のスレッドセーフ設定が機能していることを確認するために、falseに設定し、同じテストを実行しました。予想どおり、各リクエストは新しいインスタンスを起動しました。

于 2012-09-30T14:29:45.143 に答える