Python:Tornado 第二章:實戰演練:開發Tornado網站:第六節:異步與協程化

上一篇文章: Python:Tornado 第二章:實戰演練:開發Tornado網站:第五節:RequestHandler:輸出相應函數
下一篇文章: Python:Tornado 第二章:實戰演練:開發Tornado網站:第七節:安全Cookie機制

Tornado有兩種方式可改變同步的處理流程:web

  • 異步化:針對RequestHandler的處理函數使用@tornado.web.asynchronous修飾器,將默認的同步機制改成異步機制。該方法已通過期。
  • 協程化:針對RequestHandler的處理函數使用@tornado.gen.coroutine修飾器,將默認的同步機制改成協程機制。

一、異步化

該方法已通過期,再也不贅述,直接使用@tornado.gen.coroutine代替。segmentfault

二、協程化

Tornado協程結合了同步處理和異步處理的有點,使得代碼即清晰易懂,又可以適應海量客戶端的高併發請求。安全

代碼:併發

import tornado.web
import tornado.httpclient
from tornado.web import Application
import tornado.ioloop
class MainHandler(tornado.web.RequestHandler):


    @tornado.gen.coroutine
    def get(self):
        http=tornado.httpclient.AsyncHTTPClient()
        response=yield http.fetch("http://www.baidu.com")
        self.write(response.body)

if __name__ == '__main__':
    app=Application([
        ("/",MainHandler)
    ])
    app.listen("8888")
    tornado.ioloop.IOLoop.current().start()

協程化的關鍵技術點以下:app

  • 用tornado.gen.coroutine裝飾MainHandler的get()、post()等處理函數。
  • 使用異步對象處理耗時操做,好比本例的AsyncHTTPClient。
  • 調用yield關鍵字獲取異步對象的處理結果。
相關文章
相關標籤/搜索