第10回InfoTalkに参加しました

例によってメモ~

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楽しそう~。いろいろ使えそうです。

Event 

See also