1. 程式人生 > >Tornado非同步之-協程與回撥

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
   

回撥處理非同步請求

  • 回撥 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