2016-04-20 10 views
0
for index in range(1,10): 
    send_headers = { 
        'User-Agent':'Mozilla/5.0 (Windows NT 6.2;rv:16.0) Gecko/20100101 Firefox/16.0', 
        'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
        'Connection':'keep-alive' 
    } 

    try: 
     req=urllib2.Request(url,headers=send_headers) 
     response=urllib2.urlopen(req) 
     sleeptime=random.randint(1,30*index) 
     time.sleep(sleeptime) 
    except Exception, e: 
     print e 
     traceback.print_exc() 
     sleeptime=random.randint(13,40*index) 
     print url 
     time.sleep(sleeptime) 
     continue 
    if response.getcode() != 200: 
     continue 
    else: 
     break 
return response.read() 

私は私のコード時にはリターンresponse.read()の睡眠が、プログラムが死んでいないと、エラーや例外がないことがわかった、と私にはわからない理由とどのように起こるか。どうすれば修正できますか?時々response.read()関数の私のコードの睡眠、

これはPythonです。ウェブ上で写真を撮りたいです。

+0

あなたの質問は不明です。あなたは 'time.sleep()'ステートメントを持っています。そのため、無作為に眠ってしまいます。 – Selcuk

+0

私のコードをデバッグしましたが、エラーなしでresponse.read()で停止していました – mengyeer

答えて

0

接続タイムアウトのためにスリープ状態になっている可能性があります。

urllib.urlopenがタイムアウトパラメータを経由してタイムアウトを設定することができます。(のpython3)

settedていない場合は、ソケットのデフォルトのタイムアウトが使用されます。

デフォルトのソケットタイムアウトは-1.0です。設定はありません。タイムアウトはありません。

ので

response=urllib2.urlopen(req, timeout=3) 

、これを試してみたり、python2

とにかく
import socket 
setdefaulttimeout(3.0) 

で、requests代わりのurllib2の

0

response.readを使用すると、サーバーからのHTTP応答を読み込みます。読み取りには、ネットワーク経由でバイトが到着するのを待つため、時間がかかることがあります。

ウェブからリソースを取得するには時間がかかりますが、この方法はありません。

つまり、ネットワークに非ブロッキングでアクセスし、データが利用可能になったときに通知を受けることができます。これにより、リソースの取得に時間がかかるという事実は変わりません。

関連する問題