天天看點

twisted.http 異步通路站點

#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()