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

ads

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

ads