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