背景:
線上機器,需要過濾access日志,發(fā)送給另外一個api
期初是單進程,效率太低,改為多進程發(fā)送后,查看日志中偶爾會出現(xiàn)異常錯誤(忘記截圖了。。。)
總之就是端口不夠用了報錯
原因:
每一條日志都是一次請求發(fā)送給api,短連接產(chǎn)生大量time_wait狀態(tài),占用了大量端口
這種高并發(fā)導(dǎo)致的大量time_wait狀態(tài)內(nèi)核調(diào)優(yōu)基本是沒用的,后來改為長連接解決問題
第一版短連接版本關(guān)鍵代碼如下
因涉及具體業(yè)務(wù)信息,只貼出了關(guān)鍵部分代碼
import pycurlwhere True: url=myqueue.get() send_msg=pycurl.Curl() send_msg.setopt(pycurl.URL,url) send_msg.perform() print send_msg.getinfo(send_msg.HTTP_CODE)
修改后長連接版本如下:
采用requests庫
import requestsclient=requests.session()headers = {'Content-Type': 'application/json', 'Connection': 'keep-alive'}where True: url=myqueue.get() r=client.get(url,headers=headers) print r.status_code以上這篇詳談python http長連接客戶端就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網(wǎng)。
新聞熱點
疑難解答
圖片精選