我正在编写将在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