Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Secure Code for Interactive Programming

2,021 views

Published on

PyCon JP 2014 オープンスペースで発表。
IPython Notebookといったインタラクティブ環境用のコードをいかに安全にするか。

Published in: Technology
  • Be the first to comment

Secure Code for Interactive Programming

  1. 1. Secure Code for Python Interactive Programming PyCon JP 2014 OpenSpace 2014/9/14 @hagino3000
  2. 2. 前提 ここではデータ分析環境DB 等の巨大なデータソースに直 にアクセスできる共用 IPython Notebookサーバー を想定しています。
  3. 3. Interactive Programming • Pros • Powerful, Fun, Quick • Cons • Some dangerous (Probability of breaking production environment)
  4. 4. IPython Notebook からの……
  5. 5. 突然の死 • 大量のデータをロードしてしまいスワップアウト • DB、ネットワークに負荷をかける • 重い処理を放置 • CPUに負荷をかけてしまい監視にひっかかる • なにげなくファイルに保存したらDisk Full
  6. 6. 回避したい • インフラの人におこられる • データ回収の遅延 • データロスト & 再送処理の手間
  7. 7. 運用と設計でなんとかしよう • インタラクティブ環境向けのショートカットメ ソッド(データロード) • 省メモリな実装 • 人間の怠惰さ、ミスを想定した設計 • 共用IPython Notebookサーバの運用
  8. 8. 省メモリ • とにかくgeneratorを返す • DBフルスキャンする様なコードを実行していた としても、generatorが帰ってきた時点ではセー フ • 正しく扱えばよい
  9. 9. generatorのチェーン例 def invoke(file_name, db_name):! db = MongoClient(‘localhost’)! db.events.insert(convert(parse(readline(file_name))))! ! def readline(file_name):! with gzip.open(file_name) as input:! for line in input:! yield line! ! def parse(lines):! for line in lines:! yield json.loads(line)! ! def convert(rows):! for row in rows:! yield {…(略)…}
  10. 10. メモリ使用量のチェック $ pip install memory-profiler $ pip install psutil からの @profile! def readline(file_name):! with gzip.open(file_name) as input:! for line in input:! yield line 指定したメソッドの行ごとに使用量が出せる
  11. 11. 大量のオブジェクトの扱い • __slots__ 使っておく • 属性の少ないクラスを扱う場合は有効
  12. 12. 人間は怠惰 • とりあえずパラメータ無しで実行とかしがち • 絞り込み条件無しで実行すると全データフェッ チするような設計だと死ぬ • 例えば生ログを取ってくる様なメソッドの場合 は期間を必須にする • 期間の最初だけ指定されたら??
  13. 13. 人間は怠惰 • docコメント書いておく • mymodule.load_data? でいつでも参照できる
  14. 14. Notebook Serverの運用 • 1日一回再起動 • CPU、メモリ使用量は不定期に暴れる • 起動ユーザーは権限小さめが良い • インフラの人には大丈夫だと言おう
  15. 15. Enjoy Interactive Programming

×