Tornado非同步之-協程與回撥
阿新 • • 發佈:2018-12-30
回撥處理非同步請求
- 回撥
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