1. 程式人生 > >python 解決訪問慢的問題

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應用初始化會在網站第一次建立後