#coding=utf8
from twisted.internet import reactor
from twisted.internet.task import deferLater
from twisted.web.server import Site, NOT_DONE_YET
from twisted.web.resource import Resource
import time,sys
DELAY = 10
#同步執行
class WebRootResource(Resource):
isLeaf = True
def render_GET(self, request):
time.sleep(DELAY)
return '<html>Current Time:%s</html>' % time.asctime()
#異步執行
class AsyWebRootResource(Resource):
isLeaf = True
def render_laterCall(self, request):
#要特别注意異步的時候,不能再return '<html>....'
#隻能通過request.write() request.finish()來完成異步執行操作。
#return '<html>Current Time:%s</html>' % time.asctime()
request.write('Finally done Time:%s' % time.asctime())
request.finish()
def render_GET(self, request):
#首先調用lambda:request,傳回request作為下次調用參數
#去延遲調用render_latercall,将request作為參數
d = deferLater(reactor, DELAY, lambda: request)
d.addCallback(self.render_laterCall)
return NOT_DONE_YET
if __name__ == '__main__':
reload(sys)
sys.setdefaultencoding('utf8')
reactor.listenTCP(8000, Site(WebRootResource()))
#reactor.listenTCP(8000, Site(AsyWebRootResource()))
reactor.run()