Skip to content

Instantly share code, notes, and snippets.

@orestis
Created June 16, 2011 21:33
Show Gist options
  • Save orestis/1030336 to your computer and use it in GitHub Desktop.
Save orestis/1030336 to your computer and use it in GitHub Desktop.
timeout sample
from twisted.web.resource import Resource
from twisted.web.server import Site, NOT_DONE_YET
from twisted.web.client import getPage
from twisted.internet import reactor, defer
from twisted.python import log
import sys
log.startLogging(sys.stdout)
from sites import SITES
class Index(Resource):
def got_site(self, data, site, request):
request.write('GOT %s (%d)<br>\r\n' % (site, len(data)))
def got_error(self, error, site, request):
request.write('ERROR %s (%s)<br>\r\n' % (site, error.getErrorMessage()))
def render_GET(self, request):
request.write('<html><body>')
dl = []
limit = defer.DeferredSemaphore(10)
for site in SITES:
address = 'http://' + site
d = limit.run(getPage, address, timeout=2)
d.addCallback(self.got_site, address, request)
d.addErrback(self.got_error, address, request)
dl.append(d)
dl = defer.DeferredList(dl)
def finished(results):
request.write('</body></html>')
request.finish()
dl.addCallback(finished)
return NOT_DONE_YET
root = Resource()
root.putChild('', Index())
factory = Site(root)
reactor.listenTCP(8000, factory)
reactor.run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment