0

urllib2 を使用して、特定の http アドレスに投稿された .csv ファイルにアクセスしようとしています。私が使用しているコードは 1 か月前までは機能していましたが、現在は .read() コマンドで散発的にハングします。犯人を特定するために、さまざまなテストを行いました。アクセスしようとしているアドレスは、次の場所から公開されている気象データです。

http://climate.weatheroffice.gc.ca/climateData/bulkdata_e.html?StationID=47267&hlyRange=2008-07-15|2013-03-20&timeframe=1&Prov=ONT&format=csv&Year=2008&Day=15&Month=9

.readline() 関数は毎回機能するので、次のテストを作成して、ファイル内の読み取りプロセスが終了する場所を確認しました。

foo=urllib2.urlopen(HTTPadress)
for i in range(1000): print i,dd.readline()

これにより、プログラムがハングするまで各行が出力されます。ハングする場合は毎回同じ行にあり、この行 (通常は 680 行目あたり) に特別な書式や文字はありません。異なるデータファイルの場合、別の行でハングしますが、同じファイルの場合は常に同じです。

私が実際に使用しているコードは、複数のデータファイルをループするために使用されるより大きな関数の一部です。

def qry(query):
data =   urllib2.urlopen('http://climate.weatheroffice.gc.ca/climateData/bulkdata_e.html?'+query)
    print 'done'
    #pdb.set_trace()
    time.sleep(5)
    tmp=data.read()
    return tmp  

urlopen 関数と read 関数の間のスリープ関数は、しばらくの間、信頼性を向上させたように見えました。この関数は、通常、pdb を介して実行すると機能します。この時点で、サーバー側で .read() 関数に干渉している何かが変更されたとかなり確信していますが、これが何であり、それを回避する方法がわかりません。

ありがとう!

4

1 に答える 1