import time from twisted.internet import reactor, defer, task from twisted.application import internet, service from nevow import appserver, livepage, loaders, tags observers = [] def timer(): for obs in observers: obs.send(livepage.set('time', time.asctime())) task.LoopingCall(timer).start(1) class Timer(livepage.LivePage): addSlash = True docFactory = loaders.stan( tags.html[ tags.p(id="time"), livepage.glue]) def goingLive(self, ctx, handle): observers.append(handle) handle.notifyOnClose().addCallback(self.lost, handle).addErrback(self.lost, handle) def lost(self, why, handle): print "lost", why observers.remove(handle) root = Timer() application = service.Application('live') internet.TCPServer( 8080, appserver.NevowSite(root,logPath='web.log') ).setServiceParent(application)