我使用gevent下載一些html頁面。 有些網站速度太慢,一段時間後有些網站停止提供服務。這就是爲什麼我必須限制我提出的一組請求的總時間。爲此我使用gevent「超時」。正確的greenlet終止
timeout = Timeout(10)
timeout.start()
def downloadSite():
# code to download site's url one by one
url1 = downloadUrl()
url2 = downloadUrl()
url3 = downloadUrl()
try:
gevent.spawn(downloadSite).join()
except Timeout:
print 'Lost state here'
但它的問題是,當異常發生時,我鬆了所有的狀態。
想象一下,我抓取網站'www.test.com'。在網站管理員決定切換Web服務器進行維護之前,我已設法下載10個網址。在這種情況下,當異常情況發生時,我將丟失有關已爬網頁面的信息。
問題是 - 即使超時發生,我如何保存狀態並處理數據?
爲什麼不定義每個請求一個超時? downloadUrl()實際上在做什麼?它是否合作阻止?你能提供一個獨立的例子嗎? –
代碼被簡化。 downloadSite()函數包含獲取第一頁的代碼,找到良好的內部鏈接,下載它們,找到更多鏈接等等。我不會想象如何在單獨的Timeout中包裝每個請求。 Imho從編程的角度來看是錯誤的+它會對網站產生重大影響(想象一下從www.test.com中同時請求100個網頁) – Termos