我正在開發一個有兩個類的網路抓取工具。一個獲取資料,另一個類處理它。第一類的最終結果是一個元素串列,例如results = [1, 2, 3, 4, 5, ...] . 問題是有時,由于服務器端錯誤,串列可能為空。我怎樣才能回圈通過這個來重新啟動行程,直到串列不為空?
我有點像這樣解決了它。但我不確定這是否有效或良好的做法。
class DataScrapper:
def __init__(self):
...
def getData(self):
self.results = []
while not self.results:
...
return self.results
這是解決問題的pythonic方法嗎?還有其他更有效的方法嗎?非常感謝你。
uj5u.com熱心網友回復:
在大多數情況下,您的習語很簡單而且很好。
但是,您必須記住兩件事:
- 您沒有限制重試次數。如果服務器長時間宕機,你的腳本就會卡住。
- 即使在停機期間,您也會繼續生成請求。這可能會導致較大的客戶端和服務器負載。我強烈建議使用指數退避策略。
在 google 中快速搜索找到了backoff庫,它允許您同時執行以下操作:
@backoff.on_predicate(backoff.expo, lambda x: x == [], max_tries=10)
def getData(self):
self.results = []
...
return self.results
它檢查回傳值,如果它是一個空串列,則再次運行該函式并增加延遲,直到達到 10 次嘗試。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/417268.html
標籤:
下一篇:在R中組合大量資料集
