Tornado異步之-協程與回調


回調處理異步請求

  • 回調 callback 處理異步官方例子
# 導入所需庫
from tornado.httpclient import AsyncHTTPClient

def asynchronous_fetch(url, callback):
    http_client = AsyncHTTPClient()
    def handle_response(response):
        callback(response.body)
    http_client.fetch(url, callback=handle_response)
  • http_client處理請求時http_client.fetch(url, callback=handle_response),參數url是請求的url, 關鍵字參數callback傳入方法handle_response 此方法即為回調方法, 就是說當http_client請求完成后才會調用callback=handle_response中的 handle_response函數.
  • 請求網絡是耗時操作,傳入關鍵字參數callback來'表明'這是異步請求, 以此來確定這是異步處理請求

協程處理異步

from tornado import gen

@gen.coroutine
def fetch_coroutine(url):
    http_client = AsyncHTTPClient()
    response = yield http_client.fetch(url)
    raise gen.Return(response.body)
  • @gen.coroutine此裝飾器代表的是協程, 與關鍵字yield搭配使用
  • http_client.fetch(url)請求網絡是耗時操作, 通過關鍵字yield來掛起調用, 而當http_client.fetch(url)請求完成時再繼續從函數掛起的位置繼續往下執行.
  • raise gen.Return(response.body)在python3.3以后作用相當於return, 在python3.3之前作用是返回一個異常值, 跟 返回一個value, 以及python3.3之前generators 不可以return value, 所以tornado定義了一個特殊的返回值raise gen.Return.
  • 在python3.3以后直接用return


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM