我使用tornado做的一個web api,里面沒有資料庫存盤業務,主要業務是呼叫第三方web api 介面。
剛開始時使用的是requests模塊來做http請求,結果發現并發稍高一點的時候nginx里大量請求超時的日志,后來通過搜索相關資料,發現tornado需要使用異步httpclient,踩了第一個坑。
后面將請求第三方介面全部替換成AsyncHTTPClient后,上述問題立馬解決,并發能力大大提升,nginx錯誤日志也沒有了。
再后來根據業務需求,需要在請求第三方介面的時候使用proxy,AsyncHTTPClient不支持proxy設定,需要改用CurlAsyncHTTPClient,按照官方檔案修改好代碼后,又出現了并發超時問題,將CurlAsyncHTTPClient改回AsyncHTTPClient問題就消失。

這張圖是使用AsyncHTTPClient的時候,服務器運行情況,每個行程有多個子行程。
而當使用CurlAsyncHTTPClient或requests的時候,每個行程下面就只有一個子行程了,也就產生了并發瓶頸問題。
注意, 如果你正在使用 curl_httpclient, 強力建議你使用最新版本的 libcurl 和 pycurl. 當前 libcurl 能被支持的最小版本是 7.21.1, pycurl 能被支持的最小版本是 7.18.2. 強烈建議你所安裝的 libcurl 是和異步 DNS 決議器 (threaded 或 c-ares) 一起構建的, 否則你可能會遇到各種請求超時的問題 (更多資訊請查看
這是官方檔案的提醒,我按照要求,重新編譯安裝curl。c-ares/1.10.0 也支持了,但還是無法解決問題。

以上就是問題的描述了,希望大佬能幫忙提供一下解決思路。
只有20分,


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/31578.html
上一篇:python 爬取酷娛網圖片報錯requests.exceptions.InvalidSchema
下一篇:不行了!求助!PY3.8奇葩問題
