python腳本 請求數量達到上限,http請求重試

由于在內網發送http請求同一個token會限制次數,所以很容易達到網關流量上限。
業務中使用了多線程并發,一個線程發起一次http請求,得到正確結果后返回。這里采用的策略是,如果解析出來達到流量上限,那么該線程休眠一段時間,然后重試請求,如果還是失敗,那么繼續休眠,每次休眠的時間隨著重試輪次增加:

# 探測是否觸及網關流量上限
def probe_func(m_url, m_headers, m_json, m_timeout):json_rep = requests.post(url = m_url, headers = m_headers,json = m_json,timeout = m_timeout)zhiyan_data = json_rep.json()if(zhiyan_data['code'] != 0):return Noneelse:return json_rep# 解析數據包,不涉及probe_func中的檢測內容
def parse(json_rep, room_name, metric_name):if json_rep == None: logging.info(room_name + " json_rep == None")return 0if (json_rep.content and json_rep.status_code != 204 and json_rep.headers["content-type"].strip().startswith("application/json")):zhiyan_data = json_rep.json()if len(zhiyan_data['data']) == 0:logging.warning(zhiyan_data['日志信息拉取無結果'])return 0else:res = zhiyan_data['data']['chart_info'][0]['key_data_list'][3]['current']logging.info(room_name + str(res))if str(res) == "None":logging.warning(room_name + ":拉取zhiyan_data:" + metric_name + " 出現了問題,拉取數據為None")return 0else:return reselse:return 0# 具有可靠性地獲取數據
def request_post_reliable(m_url, m_headers, m_json, m_timeout):sleep_time_s = 1sleep_time_max = 60res = probe_func(m_url, m_headers, m_json, m_timeout)# 如果探測失敗則線程睡眠一段時間后再嘗試while (res == None):logging.info("探測失敗,線程睡眠"+str(sleep_time_s)+"秒")time.sleep(sleep_time_s)tmp = sleep_time_s * 2if tmp < sleep_time_max:sleep_time_s = tmpelse:sleep_time_s = sleep_time_maxlogging.info("睡眠結束,線程重新探測")res = probe_func(m_url, m_headers, m_json, m_timeout)# 直到探測成功,返回正確結果return res 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376614.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376614.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376614.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

shell 字符串操作

string"abcABC123ABCabc" 字符串長度: echo ${#string} #15 echo expr length $string #15 索引 用法&#xff1a;expr index $string $substring expr index $string "ABC" #4 提取子串 用法&#xff1a;${string:position} echo ${string:3} #A…

Linux 之目錄 -鳥哥的Linux私房菜

因為利用 Linux 來開發產品或 distributions 的社群/公司與個人實在太多了, 如果每個人都用自己的想 法來配置檔案放置的目錄,那么將可能造成很多管理上的困擾。 你能想象,你進入一個企業之后,所 接觸到的 Linux 目錄配置方法竟然跟你以前學的完全不同嗎? 很難想象吧~所以,后來…

python腳本:向表中插入新數據,刪除表中最舊的數據

一張表存儲歷史數據&#xff0c;最多存儲HISTORY_TABLE_MAX_ROWS條數據&#xff0c;當表中數據未達到HISTORY_TABLE_MAX_ROWS&#xff0c;直接插入&#xff1b;如果達到的話需要保證插入新數據的時候將最舊的數據刪除 這里使用先update最新數據&#xff0c;然后再重新update全表…

精通 VC++ 實效編程280例 - 02 菜單和光標

菜單和關閉時重要的 Windows 資源之一。SDK 中&#xff0c;用 HCURSOR 和 HMENU 分別表示菜單和光標的句柄。MFC 中&#xff0c;CMenu 類封裝了菜單的功能。 23 動態添加和刪除菜單項 添加菜單項可以調用 CMenu::AppendMenu 或 CMenu::InserMenu 函數&#xff0c;刪除菜單項可以…

POJ 1860: Currency Exchange 【SPFA】

套匯問題&#xff0c;從源點做SPFA&#xff0c;如果有一個點入隊次數大于v次&#xff08;v表示點的個數&#xff09;則圖中存在負權回路&#xff0c;能夠套匯&#xff0c;如果不存在負權回路&#xff0c;則判斷下源點到自身的最長路是否大于自身&#xff0c;使用SPFA時松弛操作…

python腳本:判斷字符是否為中文

# 判斷字符是否為中文 def is_chinese(ch):if u\u4e00 < ch < u\u9fff:return Trueelse:return False

Android 廣播 Broadcast學習

Android Broadcast 廣播 進程內本地廣播 如果你是在你的應用之內使用廣播&#xff0c;即不需要跨進程&#xff0c;考慮使用LocalBroadcastManager &#xff0c;這樣更有效率&#xff08;因為不需要跨進程通信&#xff09;&#xff0c;并且你不用考慮一些其他應用可以發送或接收…

python:將時間戳轉換成格式化日期

import time # 將時間戳轉換成格式化日期 def timestamp_to_str(timestampNone, format%Y-%m-%d %H:%M:%S):if timestamp:time_tuple time.localtime(timestamp) # 把時間戳轉換成時間元祖result time.strftime(format, time_tuple) # 把時間元祖轉換成格式化好的時間retur…

WebApp 里Meta標簽大全

1.先說說mate標簽里的viewport&#xff1a; viewport即可視區域&#xff0c;對于桌面瀏覽器而言&#xff0c;viewport指的就是除去所有工具欄、狀態欄、滾動條等等之后用于看網頁的區域。對于傳統WEB頁面來說&#xff0c;980的寬度在iphone上顯示是很正常的&#xff0c;也是滿屏…

python:封裝CRUD操作

# 封裝數據庫操作 def SELECT(db, cursor, sql):try:# 執行SQL語句db.ping(reconnectTrue)cursor.execute(sql)# 獲取所有記錄列表results cursor.fetchall()logging.debug("select commit")except:logging.error(sql)logging.error("select 語句執行出錯"…

我的osu游戲程序設計(oo)

osu是一款社區元素為主旨的音樂游戲,由澳大利亞人Dean Herbert (peppy)獨立制作并運行. 游戲的方法簡單,就是 1. 圈圈(Circle)&#xff1a;圈圈(Circle) 50。沒打中顯示X,并減少生命值。圈中序號的最后一個的300、100會顯示為激300、喝100。2.滑條(Slider) : 在開始端點擊按住不…

影像數據庫調研

參考Paul Graham比較各種編程語言的方法&#xff0c;我們比較各種數據庫的特點如下&#xff1a; Oracle: 我們需要企業級數據庫。 MySQL: Oracle不開源。 PostgreSQL: MySQL的功能不夠多。 SQLite: 你可以把我嵌入到任何地方。這樣&#xff0c;4種數據庫夠大家用了。 MongoDB: …

linux進程間通信快速入門【三】:信號量(XSI、POSIX以及PV原語)

文章目錄XSIsemgetsemop、semtimedopsemctl基于共享內存demo修改XSI信號量的限制PV原語PV控制并發進程數POSIX信號量使用posix命名信號量使用posix匿名信號量參考在前兩篇文章中我們使用的racingdemo都沒有對臨界區代碼進行加鎖&#xff0c;這里我們介紹以下信號量的使用。Linu…

QTableWidget的使用詳細介紹和美工總結(轉)

基本外觀設置 FriendTable->setFrameShape(QFrame::NoFrame); //設置邊框 FriendTable->setHorizontalHeaderLabels(HeadList); 設置表頭 FriendTable->setSelectionMode(QAbstractItemView::SingleSelection); 設置選擇的模式為單選擇 FriendTable->setSelect…

Android programming on Mac 之安裝Eclipse

1.安裝包在此鏈接下載&#xff1a; http://developer.android.com/sdk/index.html google GoAgent翻墻不好用&#xff0c;更新了host文件也不行&#xff0c;整了半天&#xff0c;還是一怒之下續簽了vpn賬號。早知如此&#xff0c;何必折騰。~~~~(>_<)~~~~ 更新文件時…

c++關于虛表的一些筆記

文章目錄1、虛函數表指針2、多態構成的條件3、重載、重寫、重定義 三者區別4、繼承與虛函數5、單繼承中的虛函數表無虛函數覆蓋有虛函數覆蓋6、單繼承中的虛函數表無虛函數覆蓋有虛函數覆蓋參考看《深度探索c對象模型》的時候對虛表有了點疑惑&#xff0c;正好網上有些文章解除…

4、在Shell程序中的使用變量

學習目標變量的賦值變量的訪問變量的輸入 12-4-1 變量的賦值在Shell編程中&#xff0c;所有的變量名都由字符串組成&#xff0c;并且不需要對變量進行聲明。要賦值給一個變量&#xff0c;其格式如下&#xff1a;變量名值。注意&#xff1a;等號()前后沒有空格例如&#xff1a; …

C語言技巧:把單一元素的數組放在末尾,struct可以擁有可變大小的數組

《C 對象模型》第19頁有這樣一句話 C程序員的巧計有時候卻成為c程序員的陷阱。例如把單一元素的數組放在一個struct的末尾&#xff0c;于是每個struct objects可以擁有可變數組的數組&#xff1a; struct mumble {/* stuff */char pc[1]; };//從文件或標準輸入裝置中取得一個…

探討C++ 變量生命周期、棧分配方式、類內存布局、Debug和Release程序的區別(二)...

看此文&#xff0c;務必需要先了解本文討論的背景&#xff0c;不多說&#xff0c;給出鏈接&#xff1a; 探討C 變量生命周期、棧分配方式、類內存布局、Debug和Release程序的區別&#xff08;一&#xff09; 本文會以此問題作為討論的實例&#xff0c;來具體討論以下四個問題&a…

后臺系統可擴展性學習筆記(一)概要

文章目錄系統大致架構可擴展性負載均衡器與會話保持引入冗余增強系統可用性緩存減輕數據庫壓力異步處理參考系統大致架構 當一個用戶請求從客戶端出發&#xff0c;經過網絡傳輸&#xff0c;達到 Web 服務層&#xff0c;接著進入應用層&#xff0c;最后抵達數據層&#xff0c;它…