我正在編寫將在Linux,OS X和Windows上運行的代碼。它從服務器下載大約55,000個文件的列表,然後遍歷文件列表,檢查文件是否存在於本地。 (使用SHA哈希驗證和其他一些好處。)如果文件不在本地或哈希不匹配,它會下載它們。urlopen錯誤10045,在Windows上在Python 2.5下載時'地址已被使用'
服務器端是純香草的Apache 2在Ubuntu上通過端口80
客戶端完美的作品在Mac和Linux,但下載數量後給了我在Windows(XP和Vista)這個錯誤
urllib2.URLError: <urlopen error <10048, 'Address already in use'>>
此鏈接:文件http://bytes.com/topic/python/answers/530949-client-side-tcp-socket-receiving-address-already-use-upon-connect點我TCP端口耗盡,但「netstat的-n」從來沒有向我展示了超過六個連接在「TIME_WAIT」狀態,甚至只是之前它出錯了。
代碼(每個55,000文件下載它稱爲一次)是這樣的:
request = urllib2.Request(file_remote_path)
opener = urllib2.build_opener()
datastream = opener.open(request)
outfileobj = open(temp_file_path, 'wb')
try:
while True:
chunk = datastream.read(CHUNK_SIZE)
if chunk == '':
break
else:
outfileobj.write(chunk)
finally:
outfileobj = outfileobj.close()
datastream.close()
更新:我找到greping日誌,它進入下載程序正是3998倍。我已經運行過多次,每次都在3998時失敗。鑑於鏈接文章指出可用端口爲5000-1025 = 3975(有些可能過期並被重用),它看起來更像鏈接文章描述的真正問題。但是,我仍然不確定如何解決這個問題。進行註冊表編輯不是一種選擇。
感謝您處理黑客的鏈接 – Natascha 2009-10-14 12:45:16