python 解決訪問慢的問題
tornado 非同步客戶端 AsyncHTTPClient
前面瞭解Tornado的非同步任務的常用做法,姑且歸結為非同步服務。通常在我們的服務內,還需要非同步的請求第三方服務。針對HTTP請求,Python的庫Requests是最好用的庫,沒有之一。官網宣稱:HTTP for Human。然而,在tornado中直接使用requests將會是一場惡夢。requests的請求會block整個服務程序。
上帝關上門的時候,往往回開啟一扇窗。Tornado提供了一個基於框架本身的非同步HTTP客戶端(當然也有同步的客戶端)— AsyncHTTPClient。
AsyncHTTPClient 基本用法
AsyncHTTPClient是 tornado.httpclinet 提供的一個非同步http客戶端。使用也比較簡單。與服務程序一樣,AsyncHTTPClient也可以callback和yield兩種使用方式。前者不會返回結果,後者則會返回response。
如果請求第三方服務是同步方式,同樣會殺死效能。
class SyncHandler(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
url = 'https://api.github.com/'
resp = requests.get(url)
print resp.status_code
self.finish('It works')
使用 AsyncHTTPClient
使用 yield協程 返回respond,這個雖然使用了非同步,但是掛起了任務,類似阻塞,少量還可以,大量效能就下降了
@tornado.gen.coroutine
def AsyncGet(self, url,timeout=7):
Authorization = self.__Create_AuthorizationText()
headers = {'Content-Type': 'application/json' ,'Authorization': Authorization}
http_client = tornado.httpclient.AsyncHTTPClient()
resp = yield http_client.fetch(url,method='GET',headers=headers,request_timeout=timeout)
raise tornado.gen.Return(resp.body)
所以callback的方式是效能最高的
def AsyncPost(self, url, params,timeout=7):
Authorization = self.__Create_AuthorizationText()
headers = {'Content-Type': 'application/json', 'Authorization': Authorization}
http_client = tornado.httpclient.AsyncHTTPClient()
body = JsonHelper.encode(params)
req = tornado.httpclient.HTTPRequest(
url=url,
method='POST',
headers=headers,
request_timeout=timeout,
body=body,
validate_cert=False)
http_client.fetch(req, callback=self.handler_response)
def AsyncGetClient(self, url,timeout=7):
Authorization = self.__Create_AuthorizationText()
headers = {'Content-Type': 'application/json','Authorization': Authorization}
http_client = tornado.httpclient.AsyncHTTPClient()
http_client.fetch(url,callback=self.handler_response,method='GET',headers=headers,request_timeout=timeout)
# raise tornado.gen.Return(resp.body)
def handler_response(self, response):
print response.body
self.log.info(response.body)
總結
通過AsyncHTTPClient的使用方式,可以輕鬆的實現handler對第三方服務的請求。結合前面關於tornado非同步的使用方式。無非還是兩個key。是否需要返回結果,來確定使用callback的方式還是yield的方式。當然,如果不同的函式都yield,yield也可以一直傳遞。這個特性,tornado的中的tornado.auth 裡面對oauth的認證。
相關推薦
python 解決訪問慢的問題
tornado 非同步客戶端 AsyncHTTPClient 前面瞭解Tornado的非同步任務的常用做法,姑且歸結為非同步服務。通常在我們的服務內,還需要非同步的請求第三方服務。針對HTTP請求,Python的庫Requests是最好用的庫,沒有之一。官網宣
[python] 解決pip install download速度過慢問題 更換豆瓣源
速度 spa rust environ sts use sim span com """ python建立pip.ini.py 2016年4月30日 03:35:11 codegay """ import os ini="""[global] index-url =
Azure .net WebAPP的js/css檔案過大導致訪問慢的解決辦法
https://docs.azure.cn/zh-cn/articles/azure-operations-guide/app-service-web/aog-app-service-web-qa-js-or-css-file-too-large-cause-slower-access &nbs
python爬蟲訪問https網站報錯解決方案ERROR:ssl_client_socket_impl.cc(1098)] handshake failed
報錯資訊: [3488:1356:0512/211222.342:ERROR:ssl_client_socket_impl.cc(1098)] handshake failed; returned -1, SSL error code 1, net_error -101 Chrome瀏覽器解決方
mysql訪問慢解決
配置變更思路: 擴大MySQL連線數至2000,同時擴大作業系統最大檔案描述符;擴大innodb快取池 操作步驟: vi /etc/my.cnf max_connections = 2000innodb_buffer_pool_size = 20M vi /usr/lib/systemd/syste
IIS+Asp.Net Mvc必須知道的事(解決啟動/重啟/自動回收站點後第一次訪問慢問題)
問題現象: Asp.net Mvc站點部署在IIS上後,第一個使用者第一次訪問站點,都會比較慢,確切的說是訪問站點的Action頁面(即非靜態頁面,因為靜態頁面直接由IIS處理返回給使用者即完成請求,而Action頁面IIS要轉交給Aspnet_Wp工作程序,進而涉及相關初
在windows下python指令碼訪問Oracle資料庫環境變數配置常見報錯與解決方法集合
4. ImportError: No module named luhn:下載地址 https://pypi.org/project/luhn/#files,下載後的包直接解壓到 ~:\Python27\Lib\site-packages下。或者直接cmd命令列直
csdn訪問慢解決方式
被坑的不行不行了。。。 一個專業IT網站,訪問時速度感覺像一個野雞網站,無語。。。 解決辦法:參考https://blog.csdn.net/caixingke2012/article/details/46642215 其實很簡單, csdn開啟慢, 是
解決codeforces訪問慢的問題
1.右鍵單擊開始按鈕,開啟資源管理器,在資源管理器的位址列中填寫“%SystemRoot%\System32\drivers\etc”並進入。 2.右鍵單擊“HOSTS”檔案,選擇“屬性”去掉只讀
phpmyadmin 4+ 訪問慢的問題解決
phpmyadmin 4+ 假如你訪問得比較慢, 可以看看. ===================================================== 第一步: # 檔名 ./libraries/Util.class.php 檔案. # 查
解決Codeforces訪問慢的本地方法
1.在資源管理器的位址列中填寫“%SystemRoot%\System32\drivers\etc”並進入。 2.右鍵單擊“HOSTS”檔案,選擇“屬性”,確保“HOSTS”檔案能被修改。
解決wordpress5.0.3版本本地開發訪問慢的原因
我用的是wordpress5.0.3版本 用phpstudy搭建wordpress時候,執行起來很慢,原因是wordpress\wp-includes\script-loader.php 檔案中引入了Google API,需要替換成GoogleAPI (ajax,fonts等)國內版,
localhost 127.0.0.1 訪問慢的一個解決方案
為找個清靜點的地方,今天去圖書館寫jsp,可憐上不了網,有線無線都沒有,本地連線紅叉叉。。。 寢室裡好好的http://localhost:8080/到了圖書館慢得讓人難以容忍,雖然最後都可以開啟,但實在影響除錯。 第一反應就想到了,Hosts檔案中localhost和12
優化伺服器網路訪問速度:解決CURL慢的問題-關閉IPV6支援。
現象:CURL請求URL地址,速度都在5秒以上。 說明:在使用curl獲取某介面時會curl: (6) Couldn’t resolve host ‘www.coolnull.com’。奇葩的是pi
Python- 解決PIP下載安裝速度慢
對於Python開發使用者來講,PIP安裝軟體包是家常便飯。但國外的源下載速度實在太慢,浪費時間。而且經常出現下載後安裝出錯問題。所以把PIP安裝源替換成國內映象,可以大幅提升下載速度,還可以提高安裝成功率。 國內源: 新版ubuntu要求使用https源,要注意。 清華:https://pypi.tuna
github訪問慢和clone慢解決方案
授人以魚(解決方案) ubuntu修改/etc/hosts(windows下C:\Windows\System32\drivers\etc\HOST)檔案新增如下ip隱射授人以漁(解決方法)ItleaksdeMacBook-Pro:projects itleaks$ nslo
DAY 41 python包報錯解決方案 and python包安裝慢問題
Collecting numpy Using cached numpy-1.10.2-cp27-none-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10
python-解決pip安裝速度慢的問題
對於Python開發使用者來講,PIP安裝軟體包是家常便飯。但國外的源下載速度實在太慢,浪費時間。而且經常出現下載後安裝出錯問題。所以把PIP安裝源替換成國內映象,可以大幅提升下載速度,還可以提高安裝成功率。國內源:新版ubuntu要求使用https源,要注意。清華:http
mysql遠端連線和訪問慢的解決方法
轉載1:今天公司的網路做了調整,造成原本連線很快的mysql伺服器,連線速度奇慢。以前幾十毫秒的連線現在完成一次要近5秒鐘,在排除了網路問題後,只有從mysql下手。原來每次訪問db,mysql就會試圖去解析來訪問的機器的domain name,如果這時解析不料,等一段時間會失敗,資料才能被取過來。解決方
ASP.NET第一次訪問慢的解決方法(MVC,Web Api)
問題現象 訪問asp.net web專案的時候,第一次訪問比較慢,當閒置一段時間後,再次訪問還是會非常慢。 問題原因 這是IIS回收造成的,再次訪問的時候會初始化操作,初始化需要耗費時間,所以訪問會比較慢,第二次訪問的時候不需要初始化操作,因此變快了。 解決辦法 IIS應用初始化會在網站第一次建立後