HDEラボの桜井です。
3月もちょっと雪が降りそうですが、全国的には暖冬で少し心配です。
飲料水ネタが連発したので、Twistedネタでも。
Twistedは、いわゆる「イベント駆動型」のネットワークフレームワークです。
イベント駆動型ということは、非同期プログラミングということで、メソッドを実行したら登録したコールバック関数を実行する仕組みなのです。
(例、ajaxのxmlHttpRequest)
このコールバックの仕組みを提供するのが、Deferred(twisted.interneet.deferred)です。
以前書いたデータベース呼び出しのサンプルに、エラー処理を追加するためにDeferredオブジェクトを使ってみましょう。
3月もちょっと雪が降りそうですが、全国的には暖冬で少し心配です。
飲料水ネタが連発したので、Twistedネタでも。
Twistedは、いわゆる「イベント駆動型」のネットワークフレームワークです。
イベント駆動型ということは、非同期プログラミングということで、メソッドを実行したら登録したコールバック関数を実行する仕組みなのです。
(例、ajaxのxmlHttpRequest)
このコールバックの仕組みを提供するのが、Deferred(twisted.interneet.deferred)です。
以前書いたデータベース呼び出しのサンプルに、エラー処理を追加するためにDeferredオブジェクトを使ってみましょう。
echo.tac(ここを参照)
これで、データベース書き込みに成功した場合はデータを、失敗した場合は「error」を表示するようになります。
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」を表示するようになります。




Leave a comment