urllib2 を使用して、特定の http アドレスに投稿された .csv ファイルにアクセスしようとしています。私が使用しているコードは 1 か月前までは機能していましたが、現在は .read() コマンドで散発的にハングします。犯人を特定するために、さまざまなテストを行いました。アクセスしようとしているアドレスは、次の場所から公開されている気象データです。
.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() 関数に干渉している何かが変更されたとかなり確信していますが、これが何であり、それを回避する方法がわかりません。
ありがとう!