TwistedのDeferrdオブジェクト

| | Comments (0) | TrackBacks (0)
HDEラボの桜井です。
3月もちょっと雪が降りそうですが、全国的には暖冬で少し心配です。

飲料水ネタが連発したので、Twistedネタでも。
Twistedは、いわゆる「イベント駆動型」のネットワークフレームワークです。
イベント駆動型ということは、非同期プログラミングということで、メソッドを実行したら登録したコールバック関数を実行する仕組みなのです。
(例、ajaxのxmlHttpRequest)
このコールバックの仕組みを提供するのが、Deferred(twisted.interneet.deferred)です。
以前書いたデータベース呼び出しのサンプルに、エラー処理を追加するためにDeferredオブジェクトを使ってみましょう。

echo.tac(ここを参照)
from twisted.internet.protocol import Protocol,Factory
from twisted.application import service,internet
from twisted.enterprise import adbapi

class Echo(Protocol):
  def __init__(self):
    self.db = adbapi.ConnectionPool("pgdb", database='test', host='localhost:5432', user='admin', password='password')
    self.db.connect()
  def __del__(self):
    self.db.close()
  def dataReceived(self, data):
    deferred = self.db.runOperation("INSERT INTO message_log (comment) values(?)", (data))
    deferred.addCallback(self._success(data))
    deferred.addErrback(self._error)
  def _success(self, result, data):
    self.transport.write(data)
  def _error(self, failure):
    self.transport.write("error")

factory = Factory()
factory.protocol = Echo

myServer = internet.TCPServer(2345, factory)
application = service.Application('Echo')
myServer.setServiceParent(application)

これで、データベース書き込みに成功した場合はデータを、失敗した場合は「error」を表示するようになります。

0 TrackBacks

Listed below are links to blogs that reference this entry: TwistedのDeferrdオブジェクト.

TrackBack URL for this entry: http://lab.hde.co.jp/blog/mt-tb.cgi/100

Leave a comment

About this Entry

This page contains a single entry by Takeshi SAKURAI published on March 2, 2009 11:24 AM.

ALOHA MAID NATURAL(オレンジ)を飲んでみた was the previous entry in this blog.

ガラナ アンタルチカを飲んでみた is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.