2013-01-03 30 views
2

我使用的urllib2庫我的代碼,我使用了很多(的urlopen)編輯:使用loadURLurllib2的超時

我有我的網絡上的問題,當我瀏覽的網站,有時我的瀏覽器被連接到一個特定的網站,有時我的瀏覽器返回一個超時

我的問題是如果我使用urllib2對我的代碼它可以超時試圖連接太長時間到某個網站或代碼將得到卡在那條線上。

我知道,urllib2可以處理超時而無需在代碼中指定它,但它可以應用於這種情況?

感謝您的時間

編輯:

def checker(self) 
try: 
    html = self.loadurl("MY URL HERE") 
    if self.ip_ != html: 
(...) 
except Exeption, error: 
    html = "bad" 
+0

你打開網址的單獨線程? – aacanakin

+0

你可以看看那個http://stackoverflow.com/questions/4207983/python-urllib2-timeout – aacanakin

+0

嗨aacanakin感謝您的回覆 我有這個在我的代碼: 'code' 高清檢查(個體經營) 嘗試: HTML = self.loadurl( 「MY URL HERE」) 如果self.ip_ = HTML: (...) 除了Exeption,錯誤: HTML = 「壞」 – Albert

回答

1

從我小的研究中,urllib2.urlopen()功能在Python增加2.6

因此,超時問題應該通過發送定製超時解決到urllib2.urlopen函數。代碼應該看起來像這樣;

response = urllib2.urlopen("---insert url here---", None, your-timeout-value)

your-timeout-value參數是一個可選參數,其定義了以秒超時。

編輯:根據您的評論,我得到,你不需要代碼等待太久,那麼你應該有以下代碼不會卡住;

import socket 
import urllib2 

socket.setdefaulttimeout(10) 

10可根據相關的連接速度&網站加載時間數學公式來改變。

+0

超時參數在Python 2.6中添加; urllib2和它的urlopen存在時間更長。 – poke

+0

謝謝你的回覆 據我所知,如果你不指定超時參數,它使用全局默認超時,但花費太長的時間來加載一個現有的網站,它可以解決DNS,但卡住連接可以被urllib2庫的全局默認超時處理? 我只是需要代碼不會卡在加載一個網站,並繼續到最後 – Albert

+0

此外,如果你有同時(多線程)'urlopen()',那麼一些網絡服務器可能會理解這是一個DDOS攻擊,你可能會從這些請求的響應中獲得http錯誤。 – aacanakin