Pythonが楽しい季節になって参りました。クラスを書いていると変わった挙動に出会ったので、軽く調べてメモしておきます。クラス変数の挙動試験キッカケ最初は、Pythonにおけるクラス変数とインスタンス変数の関係的なものを知らず、変数の初期化の役割をクラス変数にやらせていました。それが、どうもLambdaで実行するとクラス変数の値の変更がキャッシュされてしまうことがあるようで、そうでないこともあるようで、色々と不審に思って調べ始めました。テストコード内容はこんな感じ。1つ書いてを数回pythonコマンドで実行すると、出力内容はこんな感じ。(0x261e8f0)当然、クラス変数は毎回初期化されます。Lambdaでの実行結果これがLambdaで実行すると、こうなります。(0x7f65e7c70a28)これからわかることは、このような感じ。複数のホストで実行される。体感ではほぼランダム。挙動は同じホストごとにプロセスが残っていると推測コード更新後の挙動コードを更新すると、結果はこうなります。(0x7fc5cbb06a28)プロセスを作りなおしたっぽいのがわかります。新しく関数のインスタンスを作成するのではなく、関数のインスタンスを保持してその後のリクエストに対応することがあります。常にインスタンスを再利用するわけではありません。何度も実行しているだけで、そのため残る仕様のものは残っている、というだけのことでした。新規に関数インスタンスを作成するのは、コード更新時は確実で、他にも時間経過とかあるかもしれませんが不明です。実行しても、以下のようにリストと辞書のクラス変数は値が残ったので、この仕様はPython独特のものなのでしょう。インスタンス変数でやるのが基本のようなことをどこかで見たので、そのように書いていけば特に問題は出ないかと思います。容量を割り当てることができます。AWS500MBも使えるので、おとなしくここでmtimeでの読み書きキャッシュすることにしましょうかね、と。複数ホストで実行されるため、台数分はキャッシュを作ることになりますが、オンデマンド価格JSONなど、作り直しのタイミングがさほど重要じゃないものには十分でしょう。まとめると、『よくある質問』はちゃんと全部読みましょうってことです、ハイ。コメントをキャンセルメールアドレスが公開されることはありません。data-url="">外道父ドリコムで主にインフラエンジニアをやっている何でも屋。WordPress.。