使用httprequest太無腦了,太莽了,當希望使用非同步request時,首先引入asynchttprequest
from tornado.httpclient import asynchttpclient
將介面中的方法新增上tornado的協程符
@coroutine
根據request的方式(get或者post)封裝引數
get方法,封裝url,分為三部分, host,介面路由以及引數串,其中介面路由和引數由 『?』 分割
(host, name, query_str)post方法, 將引數列表封裝為dict,並用urlencode處理
args =
body = urllib.urlencode(args)
傳送請求: 由於是非同步方法,使用yield asynchttpclient().fetch()方法傳送
引數列表:
獲取response內容:
使用safe_json_decode以及safte_typed_from_str來解析response
int)最後對response內容進行校驗,輸出日誌raise error
乙個模板類,僅供參考
:raise blerror(u'內部呼叫錯誤'
)except exception as e:
gen_log.warn(u'request to {}/{} failed {}'
.format
(host, name,
unicode
(e))
)raise blerror(u'內部呼叫錯誤'
)if nocheck:
raise return(res.body)
else
: data = safe_json_decode(res.body)
if data[
'status']!=
1:raise blerror(u'內部呼叫錯誤'
)raise return(data[
'data'
])
Tornado非同步學習
why asynchronous tornado是乙個非同步web framework,說是非同步,是因為tornado server與client的網路互動是非同步的,底層基於io event loop。但是如果client請求server處理的handler裡面有乙個阻塞的耗時操作,那麼整體的s...
Tornado非同步模式
先介紹下背景 由於工作需要,前段時間又寫了一段爬蟲去獲取和更新一些資料。之前爬蟲主要用scrapy框架批量爬取一些頁面資料,或者用gevent呼叫目標站點的介面。偶然看到了tornado,聽說這個框架很強大,所以打算這次爬蟲用tornado試試。不足之處,歡迎指正。總的來說,tornado是pyth...
Tornado 非同步socketTCP通訊
tornado 有 tcpclient 和 tcpserver 兩個類,可用於實現 tcp 的客戶端和服務端。事實上,這兩個類都是對iostream的簡單包裝。iostream 是 client 與 server 之間的 tcp 通道。被動等待建立 iostream 的一方是 server,主動找對...