例によってメモ~
Twisted
コンピューターは待ちがいっぱい→解決したい 方法は2通り。
スレッドで多重化して効率化
- 同期型を多重化
- ブロッキングI/O
- コードが簡単でわかりやすい
- 遅い
- 無駄が多い(なにもせずただ待つ)
- 多重化したら、切り替えのオーバーヘッドがある
状態が変化したときだけ処理をすることで効率化→Network Programing Style!
例: AJAX, Chrome, Weave, Ariel AirOne, などなど
- 非同期型
- ノンブロッキングI/O
- コールバックで処理を再スターと
- 1スレッドでたくさん処理できる
- コードがわかりづらい
- コールバックの連鎖で処理を実現するため、処理が分断されてわかりづらい
- コールバック関数の中で重い処理をすると、アプリケーション全体が止まる
- 個々のメソッドの実行時間を気にする必要がある
- 0.5秒以内くらいでないとお話にならない
- 同期処理のコードは、そのまま流用はできない
Twisted Framework
Pythonの非同期処理ライブラリ・フレームワーク
- Asyncore
- 標準ライブラリ
- eventlet
- Second Lifeが開発・利用している
- Tronado
- FriendFeedで使われている
- Webフレームワーク
- ドキュメントの日本語訳が出た
- Twisted
- 老舗
- 信者が多い!?
- BitTorrent
- Apple iCal WebDAVサーバ
- XENの管理コンソール
- Chandler
- Zope3(Option)など
- マルチプラットフォーム
- 複数のイベントループをサポート
Twistedのコアなところ
非同期にできるモノ
- network
- TCP, UDP, Unix Socket
- file access
- db access
- sAsyncだとSQLAlchemy
- STD I/O
- Linuxなら標準入出力もサポート
Twistedプログラミング
Twistedのキホン: 4つ抑えておけばOK!
- reactor: twistedのイベントループのエンジン
- イベントに応じて、コールバック処理を実行させる
- スケジューリングする
- select/poll/epoll, Win32, gtk, QT, kqueue(experimental)などのイベントを取り扱うことができる
- deferred: コールバック処理の管理メカニズム
- イベント(webページ取得などの処理)をtwistedに登録すると、deferredが返却されるので、そのdeferredにコールバック関数を登録する サーバをつくる場合
- factory: クライアントとの接続とprotocolの管理
- protocol: クライアントとのデータのやりとりをする
コールバックの決定
呼び出し元と、結果を処理する部分が異なる
- 同期型とはかなり違う
- コールバック関数の中で、別の非同期API+callbackを呼び出すと、もうわけわかめ →PythonではGeneratorによるコルーチン(マイクロスレッド、無重量スレッド)で解決している (yieldを使う)
モジュール
サブプロジェクトがたくさん。 http/pop/smtp/ssh/dns/nntp/ircなど・・・ webはhttp/1.0, web2はhttp/1.1予定、なんだけど迷走しているらしい
Twistedで動くフレームワーク
Nevow(ぬーぼー)というのがある。 web2が落ち着かないので、Divmod社が作った。でもDivmod社の人はTwistedのコミッタ。何してんだか・・・w htmlテンプレートやAJAX/Cometが標準でついている。
そのた
Q. マルチコアの面倒はみてくれる? →A. みてくれない。自分でしないとだめ
まとめ
Pythonってのがいいよね!
組み込みLinuxとクラウド
めもれず。
ヒトコト
Twisted楽しそう~。いろいろ使えそうです。
See also
- #isucon チーム「ウー馬場ーイー222」でISUCON13本選に参加し30位になりました
- 「SRE≠インフラなんだけどもう誤解されちゃってるから、DevOps新実装としてSite Production Engineeringはいかがでしょう?」でJAWS DAYS 2022に登壇しました #jawsdays #jawsug
- #isucon チーム「シン・ウー馬場ーイー2」でISUCON12本選に進出し12位になりました
- #isucon チーム「シン・ウー馬場ーイー2」でISUCON12予選に参加し2位で予選突破しました
- 「非ITの事業会社にSREと言わずにSREを持ち込んだ」SRE NEXT 2022で登壇しました #srenext