Twisted ПАиПП — Классические примеры
Deferred \ Callbacks \ Errbacks
Не блокирующий запрос web страницы:
from twisted.web.client import getPage
from twisted.internet import reactor
def lowerCaseContents(contents):
return contents.lower()
def printContents(contents):
print contents
reactor.stop()
deferred = getPage('http://twistedmatrix.com/')
# Добавляем два callback'а для запроса web страницы
# первый преобразует весь полученный текст к нижнему регистру
# второй распечатает ответ запроса в стандартный поток вывода
deferred.addCallback(lowerCaseContents)
deferred.addCallback(printContents)
reactor.run()
Добавляем обработку ошибок errback в общий запрос:
from twisted.web.client import getPage
from twisted.internet import reactor
def errorHandler(error):
print "An error has occurred: <%s>" % str(error)
reactor.stop()
def printContents(contents):
print contents
reactor.stop()
# Запрашиваем не существующую страницу
deferred = getPage('http://twistedmatrix.com/does-not-exist')
# обработка запроса без ошибок
deferred.addCallback(printContents)
# обработка ошибки
deferred.addErrback(errorHandler)
reactor.run()
Пример сервера для сбора сообщений(Logger):
#!/usr/bin/python
from twisted.internet.protocol import Protocol, Factory
from twisted.internet import reactor
log = file("log.txt","w")
class DummyLogger(Protocol):
def dataReceived(self, data):
log.write(data)
log.flush()
self.transport.write(data)
# Говорим фабрике сервиса использовать протокол DummyLogger
dummy_factory = Factory()
dummy_factory.protocol = DummyLogger
# 8007 порт сервиса сбора логов.
# Сам сервис использует наш dummy_factory для порождения
# протокола-обработчика данных каждой сессии соединения
reactor.listenTCP(8007, dummy_factory)
reactor.run()



















factory.protocol = DummyLogger -> dummy_factory.protocol = DummyLogger