SlideShare a Scribd company logo
1 of 59
Download to read offline
Djangoアプリケーション 
パフォーマンスチューニング 
@hirokiky
話すこと 
Djangoアプリケーション高速化 
パフォーマンス測定ツール
話さないこと 
ミドルウェアパラメータ調整 
検証用データの作成方法 
なんか魔法みたいに速くなる技
自己紹介 
@hirokiky 
Python Django 好き 
ギョームで100万ユーザーくらいのサイト 
Django本体への貢献
Github 
https://github.com/hirokiky/
Djangoアプリ高速化 
SQLを吐きまくるコードは誰だ 
インデックス 
キャッシュキャッシュキャッシュ 
アプリケーション外
SQLを吐きまくるコードは誰だ 
● django-debug-toolbar 
dbログ出力
django-debug-toolbar 
デモ 
https://pypi.python.org/pypi/django-debug-toolbar
django-debug-toolbar
dbログ出力
dbログ出力設定例 
LOGGING['loggers']['django.db.backends'] = { 
'level': 'DEBUG', 
'handlers': ['console'] 
} 
'console'ハンドラーは標準出力に表示する想定
SQLを吐きまくるコードを倒す 
● .select_related/.prefetch_related 
.bulk_create / .update 
.count / .exists
.select_related (demo) 
● FK先のデータも一緒に取ってくる 
内部的にはJOINなどが走る
.prefetch_related (demo) 
● FK元のデータも一緒に取ってくる 
複数クエリを実行しPython側で結合
.bulk_create (demo) 
● 複数のオブジェクトを一度に作成
.update
.exist - countダメ
その他 
● .only / .defer 
.values / .values_list 
アプリケーションが複雑化しやすい....
QuerySetはlazy 
>>> articles = Article.objects.all() 
>>> articles = articles.filter(title__startswith='title') 
>>> print(articles) 
>>> 
>>> q = articles.filter(author_id=1) 
>>> print(q) 
ここでクエリ実行 
https://docs.djangoproject.com/en/1.7/topics/db/queries/#querysets-are-lazy
ここまでのまとめ 
● ORMが実行するSQLを知ろう 
ORMの特性を意識しよう 
他にも: https://docs.djangoproject.com/en/1.7/topics/db/optimization/
インデックス 
● 適切なインデックスを使おう 
結局相手にしてるのはRDB
インデックス 
1) 吐かれてるSQLをみて適応してく 
2) インデックスがかかるクエリに変更
吐かれるクエリは? 
検証環境などにデータたっぷりいれて 
画面をポチポチします 
JetProfilerなどがツールも優秀です
JetProfiler for MySQL 
http://www.jetprofiler.com/tour/
インデックスの貼り方 
ここでは話しません
インデックスがかかるクエリにする 
.extra: クエリの一部分を生SQLで書く 
.raw: クエリを生SQLで書く 
複雑化しやすいのでキャッシュとの兼ね合いです
ここまでのまとめ 
● クエリを眺めてインデックス適応 
好みのクエリを走るようにする 
あとそもそもテーブルの設計ちゃんとしましょう
キャッシュキャッシュキャッシュ 
キャッシュの種類と使いどころ 
Redisでのキャッシュ
キャッシュの種類 
レスポンスキャッシュ 
ビューキャッシュ 
テンプレートキャッシュ 
オブジェクトキャッシュ 
効果的 
https://docs.djangoproject.com/en/1.7/topics/cache/
テンプレートキャッシュ 
{% load cache %} 
{% cache 500 sidebar %} 
.. sidebar .. 
{% endcache %} 
https://docs.djangoproject.com/en/1.7/topics/cache/
キャッシュの使いどころ 
ユーザーに依存する表示は基本キャッシュ無理 
画面設計段階でどこキャッシュできるか考える
Redisでキャッシュ 
Redisならではの型を有効利用: 
* Set型でユニークユーザーの管理 
* SortedSet型でランキング 
http://redis.io/
まとめ 
ユーザーに近いほどキャッシュは有効 
あまり複雑化しないように設計
アプリケーション外 
セッションバックエンド変更 
静的ファイル圧縮 
DBのPrimary/Replica構成
セッションバックエンド変更 
Cacheバックエンド 
Redisのバックエンド
Redisバックエンド 
$ pip install django-redis-sessions 
SESSION_ENGINE = 'redis_sessions.session' 
https://pypi.python.org/pypi/django-redis-sessions
静的ファイル圧縮 
django-compressor か django-asset
django-compressor 
{% load compress %} 
{% compress css %} 
<link rel="stylesheet" href="/static/css/one.css" type="text/css"> 
<style type="text/css">p { border:5px solid green;}</style> 
<link rel="stylesheet" href="/static/css/two.css" type="text/css"> 
{% endcompress %} 
http://django-compressor.readthedocs.org/en/latest/
DBのMaster/Slave 
django-replicatedが便利 
レプリ遅延にも賢く対応
django-replicated 
$ pip install django-replicated 
DATABASES = {'default': {...}, 
'slave1': {...}} 
DATABASE_SLAVES = ['slave1'] 
DATABASE_ROUTERS = ['django_replicated.ReplicationRouter'] 
更新が master, 参照が slave になります 
https://github.com/yandex/django_replicated
レプリ遅延対策 
MIDDLEWARE_CLASSES = [ 
... 
'django_replicated.middleware.ReplicationMiddleware', 
] 
GET, HEADで slave, それ以外で master 
https://github.com/yandex/django_replicated
レプリ遅延対策 2 
from django_replicated.decorators import use_master, use_slave 
@use_master 
def my_view(request, ...): 
# GETで更新&参照するViewなんだぜ。。。 
Viewに強制指定 
https://github.com/yandex/django_replicated
まとめ 
ORMの使い方は基本としてマスター 
インデックス+キャッシュのバランス 
まんべんなくやっとくのが吉です
Funkloadでパフォーマンス測定 
負荷試験ツール (Pythonで書く) 
セッション付きのシナリオ 
静的ファイルの自動取得などリッチ 
https://funkload.nuxeo.org/
Funkload (テストシナリオ) 
1) 一覧画面 
2) 詳細画面 
3) 編集画面 
4) 更新 
5) 詳細画面
Funkload (demo) 
$ fl-run-test test_Wiki.py 
$ fl-run-bench test_Wiki TestWiki.test_update
Funkload 一覧画面
Funkload 詳細画面
Funkload 編集画面
Funkload 更新
Funkload 詳細画面
Funkload レポートビルド 
$ fl-run-test test_Wiki.py 
$ fl-run-bench test_Wiki TestWiki.test_update
レポートその他 
2レポート間の差分レポート 
複数レポートでのトレンドレポート
耐えるべき負荷は? 
アクティブユーザー10万人、1日100万PV 
ピーク時でその3倍として秒間34PV 
人間1人5秒/1ページとして同時接続数170 
このあたり模索中で良い方法などあれば教えてください
ここまでのまとめ 
FunkloadはPythonで書ける 
シナリオでかけるので信頼できる
全体まとめ 
ORMの扱いなどは当たり前にやっておく 
面倒、複雑なものは測定しつつ必要な分やる
感想 
カッコいいこと言っても結局 
設計とミドルウェアが重要 
どううまく使うかを考えましょう
出会い系 
オフィスアワー(会議室4/5)に13:15〜 
Sprint(3日目)
@hirokiky

More Related Content

What's hot

GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)智啓 出川
 
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころJunya Hayashi
 
これでBigQueryをドヤ顔で語れる!BigQueryの基本
これでBigQueryをドヤ顔で語れる!BigQueryの基本これでBigQueryをドヤ顔で語れる!BigQueryの基本
これでBigQueryをドヤ顔で語れる!BigQueryの基本Tomohiro Shinden
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけらAtsushi Nakamura
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
MariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムMariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムKouhei Sutou
 
goで末尾再帰最適化は使えるか?
goで末尾再帰最適化は使えるか?goで末尾再帰最適化は使えるか?
goで末尾再帰最適化は使えるか?mori takuma
 
PHP の GC の話
PHP の GC の話PHP の GC の話
PHP の GC の話y-uti
 
OpenAPIを利用したPythonWebアプリケーション開発
OpenAPIを利用したPythonWebアプリケーション開発OpenAPIを利用したPythonWebアプリケーション開発
OpenAPIを利用したPythonWebアプリケーション開発Takuro Wada
 
Lightweight Keycloak
Lightweight KeycloakLightweight Keycloak
Lightweight KeycloakHiroyuki Wada
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたOPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたYoshio Hanawa
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)Yoshitaka Kawashima
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説Masahiko Sawada
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回Tomoya Kawanishi
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Masahito Zembutsu
 
大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twitter大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twittermaruyama097
 
アロー演算子とスコープ定義演算子
アロー演算子とスコープ定義演算子アロー演算子とスコープ定義演算子
アロー演算子とスコープ定義演算子iPride Co., Ltd.
 

What's hot (20)

GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)
 
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
 
これでBigQueryをドヤ顔で語れる!BigQueryの基本
これでBigQueryをドヤ顔で語れる!BigQueryの基本これでBigQueryをドヤ顔で語れる!BigQueryの基本
これでBigQueryをドヤ顔で語れる!BigQueryの基本
 
MongoDBの監視
MongoDBの監視MongoDBの監視
MongoDBの監視
 
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら「関心の分離」と「疎結合」   ソフトウェアアーキテクチャのひとかけら
「関心の分離」と「疎結合」 ソフトウェアアーキテクチャのひとかけら
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
MariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムMariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システム
 
いつやるの?Git入門
いつやるの?Git入門いつやるの?Git入門
いつやるの?Git入門
 
goで末尾再帰最適化は使えるか?
goで末尾再帰最適化は使えるか?goで末尾再帰最適化は使えるか?
goで末尾再帰最適化は使えるか?
 
PHP の GC の話
PHP の GC の話PHP の GC の話
PHP の GC の話
 
OpenAPIを利用したPythonWebアプリケーション開発
OpenAPIを利用したPythonWebアプリケーション開発OpenAPIを利用したPythonWebアプリケーション開発
OpenAPIを利用したPythonWebアプリケーション開発
 
Lightweight Keycloak
Lightweight KeycloakLightweight Keycloak
Lightweight Keycloak
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたOPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twitter大規模分散システムの現在 -- Twitter
大規模分散システムの現在 -- Twitter
 
アロー演算子とスコープ定義演算子
アロー演算子とスコープ定義演算子アロー演算子とスコープ定義演算子
アロー演算子とスコープ定義演算子
 

Similar to Pycon2014 django performance

Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介Shinya Okano
 
Sohu邮箱的python经验
Sohu邮箱的python经验Sohu邮箱的python经验
Sohu邮箱的python经验Ryan Poy
 
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016Takayuki Shimizukawa
 
How to django at first
How to django at firstHow to django at first
How to django at firstMaito Kuwahara
 
debexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするにはdebexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするにはkenhys
 
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2Preferred Networks
 
初めてのPadrino
初めてのPadrino初めてのPadrino
初めてのPadrinoTakeshi Yabe
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Mori Shingo
 
Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4Taku Unno
 
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義EC-CUBEプラグイン講義
EC-CUBEプラグイン講義ria1201
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platformToru Yamaguchi
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp CodereadingHiro Yoshioka
 
Playbay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイPlaybay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイKazuhiro Hara
 
環境構築から始めるDjangoチュートリアル
環境構築から始めるDjangoチュートリアル環境構築から始めるDjangoチュートリアル
環境構築から始めるDjangoチュートリアルsakihohoribe
 
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーAyumu Kawaguchi
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードKazuhiro Hara
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterMasanori Oobayashi
 
ライブラリにあらず! 〜Google Closure Toolsの事始め〜
ライブラリにあらず! 〜Google Closure Toolsの事始め〜ライブラリにあらず! 〜Google Closure Toolsの事始め〜
ライブラリにあらず! 〜Google Closure Toolsの事始め〜Kazuya Hiruma
 
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624Yusuke Suzuki
 

Similar to Pycon2014 django performance (20)

Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
Sohu邮箱的python经验
Sohu邮箱的python经验Sohu邮箱的python经验
Sohu邮箱的python经验
 
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
 
How to django at first
How to django at firstHow to django at first
How to django at first
 
debexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするにはdebexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするには
 
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
 
初めてのPadrino
初めてのPadrino初めてのPadrino
初めてのPadrino
 
Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋Node予備校 vol.1 名古屋
Node予備校 vol.1 名古屋
 
Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4Aizu.LT::Tokyo #4
Aizu.LT::Tokyo #4
 
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義EC-CUBEプラグイン講義
EC-CUBEプラグイン講義
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
 
Playbay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイPlaybay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイ
 
環境構築から始めるDjangoチュートリアル
環境構築から始めるDjangoチュートリアル環境構築から始めるDjangoチュートリアル
環境構築から始めるDjangoチュートリアル
 
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナー
 
Capistrano
CapistranoCapistrano
Capistrano
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
 
ライブラリにあらず! 〜Google Closure Toolsの事始め〜
ライブラリにあらず! 〜Google Closure Toolsの事始め〜ライブラリにあらず! 〜Google Closure Toolsの事始め〜
ライブラリにあらず! 〜Google Closure Toolsの事始め〜
 
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624
 

More from hirokiky

簡単な算数でできる文章校正
簡単な算数でできる文章校正簡単な算数でできる文章校正
簡単な算数でできる文章校正hirokiky
 
エンジニアが起業のアイディアを見つける方法
エンジニアが起業のアイディアを見つける方法エンジニアが起業のアイディアを見つける方法
エンジニアが起業のアイディアを見つける方法hirokiky
 
それ、公開しちゃおうよ - みんなのPython勉強会63登壇
それ、公開しちゃおうよ - みんなのPython勉強会63登壇それ、公開しちゃおうよ - みんなのPython勉強会63登壇
それ、公開しちゃおうよ - みんなのPython勉強会63登壇hirokiky
 
プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017
プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017
プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017hirokiky
 
営業も広報もいない僕たちが11年間やってきたこと
営業も広報もいない僕たちが11年間やってきたこと営業も広報もいない僕たちが11年間やってきたこと
営業も広報もいない僕たちが11年間やってきたことhirokiky
 
LLoT ランゲージアップデート Python
LLoT ランゲージアップデート PythonLLoT ランゲージアップデート Python
LLoT ランゲージアップデート Pythonhirokiky
 
How we realized SOA by Python at PyCon JP 2015
How we realized SOA by Python at PyCon JP 2015How we realized SOA by Python at PyCon JP 2015
How we realized SOA by Python at PyCon JP 2015hirokiky
 
価値を届ける技術 #bpstudy 96
価値を届ける技術 #bpstudy 96価値を届ける技術 #bpstudy 96
価値を届ける技術 #bpstudy 96hirokiky
 
gargant.dispatch, a flexible dispatcher for WSGI
gargant.dispatch, a flexible dispatcher for WSGIgargant.dispatch, a flexible dispatcher for WSGI
gargant.dispatch, a flexible dispatcher for WSGIhirokiky
 
Django最速デバッグ指南 PyConAPAC 2013
Django最速デバッグ指南 PyConAPAC 2013Django最速デバッグ指南 PyConAPAC 2013
Django最速デバッグ指南 PyConAPAC 2013hirokiky
 
軽量のススメ
軽量のススメ軽量のススメ
軽量のススメhirokiky
 
django-websettingsの紹介
django-websettingsの紹介django-websettingsの紹介
django-websettingsの紹介hirokiky
 
pyramid_layoutと僕と、ときどきzope.interface
pyramid_layoutと僕と、ときどきzope.interfacepyramid_layoutと僕と、ときどきzope.interface
pyramid_layoutと僕と、ときどきzope.interfacehirokiky
 
My pyhack 1301
My pyhack 1301My pyhack 1301
My pyhack 1301hirokiky
 
Useful Django 1.4
Useful Django 1.4Useful Django 1.4
Useful Django 1.4hirokiky
 
使えるDjango1.4
使えるDjango1.4使えるDjango1.4
使えるDjango1.4hirokiky
 
個人の嗜好を学習し記事を推奨するフィードリーダ
個人の嗜好を学習し記事を推奨するフィードリーダ個人の嗜好を学習し記事を推奨するフィードリーダ
個人の嗜好を学習し記事を推奨するフィードリーダhirokiky
 
卒研中間発表資料:個人に最適化したフィードリーダの構築
卒研中間発表資料:個人に最適化したフィードリーダの構築卒研中間発表資料:個人に最適化したフィードリーダの構築
卒研中間発表資料:個人に最適化したフィードリーダの構築hirokiky
 

More from hirokiky (18)

簡単な算数でできる文章校正
簡単な算数でできる文章校正簡単な算数でできる文章校正
簡単な算数でできる文章校正
 
エンジニアが起業のアイディアを見つける方法
エンジニアが起業のアイディアを見つける方法エンジニアが起業のアイディアを見つける方法
エンジニアが起業のアイディアを見つける方法
 
それ、公開しちゃおうよ - みんなのPython勉強会63登壇
それ、公開しちゃおうよ - みんなのPython勉強会63登壇それ、公開しちゃおうよ - みんなのPython勉強会63登壇
それ、公開しちゃおうよ - みんなのPython勉強会63登壇
 
プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017
プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017
プロダクト開発してわかったDjangoの深〜いパーミッション管理の話 @ PyconJP2017
 
営業も広報もいない僕たちが11年間やってきたこと
営業も広報もいない僕たちが11年間やってきたこと営業も広報もいない僕たちが11年間やってきたこと
営業も広報もいない僕たちが11年間やってきたこと
 
LLoT ランゲージアップデート Python
LLoT ランゲージアップデート PythonLLoT ランゲージアップデート Python
LLoT ランゲージアップデート Python
 
How we realized SOA by Python at PyCon JP 2015
How we realized SOA by Python at PyCon JP 2015How we realized SOA by Python at PyCon JP 2015
How we realized SOA by Python at PyCon JP 2015
 
価値を届ける技術 #bpstudy 96
価値を届ける技術 #bpstudy 96価値を届ける技術 #bpstudy 96
価値を届ける技術 #bpstudy 96
 
gargant.dispatch, a flexible dispatcher for WSGI
gargant.dispatch, a flexible dispatcher for WSGIgargant.dispatch, a flexible dispatcher for WSGI
gargant.dispatch, a flexible dispatcher for WSGI
 
Django最速デバッグ指南 PyConAPAC 2013
Django最速デバッグ指南 PyConAPAC 2013Django最速デバッグ指南 PyConAPAC 2013
Django最速デバッグ指南 PyConAPAC 2013
 
軽量のススメ
軽量のススメ軽量のススメ
軽量のススメ
 
django-websettingsの紹介
django-websettingsの紹介django-websettingsの紹介
django-websettingsの紹介
 
pyramid_layoutと僕と、ときどきzope.interface
pyramid_layoutと僕と、ときどきzope.interfacepyramid_layoutと僕と、ときどきzope.interface
pyramid_layoutと僕と、ときどきzope.interface
 
My pyhack 1301
My pyhack 1301My pyhack 1301
My pyhack 1301
 
Useful Django 1.4
Useful Django 1.4Useful Django 1.4
Useful Django 1.4
 
使えるDjango1.4
使えるDjango1.4使えるDjango1.4
使えるDjango1.4
 
個人の嗜好を学習し記事を推奨するフィードリーダ
個人の嗜好を学習し記事を推奨するフィードリーダ個人の嗜好を学習し記事を推奨するフィードリーダ
個人の嗜好を学習し記事を推奨するフィードリーダ
 
卒研中間発表資料:個人に最適化したフィードリーダの構築
卒研中間発表資料:個人に最適化したフィードリーダの構築卒研中間発表資料:個人に最適化したフィードリーダの構築
卒研中間発表資料:個人に最適化したフィードリーダの構築
 

Pycon2014 django performance