我使用的发送请求的成千上万urllib2
与代理。 我已经收到了许多关于执行了以下错误:
urlopen error [Errno 99] Cannot assign requested address
我读到这里 ,这可能是由于已经被粘合的插座。 是这样吗? 对于如何解决这个问题,有任何的建议吗?
我使用的发送请求的成千上万urllib2
与代理。 我已经收到了许多关于执行了以下错误:
urlopen error [Errno 99] Cannot assign requested address
我读到这里 ,这可能是由于已经被粘合的插座。 是这样吗? 对于如何解决这个问题,有任何的建议吗?
这里有一个问题的答案我准备早....早得多......类似的寻找问题重复使用插座时使用错误的Socket
该错误是不同的,但潜在的问题很可能是相同的:你正在消耗所有可用的端口,并试图重新使用它们TIME_WAIT状态结束之前。
[编辑:响应于评论]
如果您的应用程序的能力/规格中,一个显而易见的策略是控制连接的速率,以避免这种情况。
另外,您也可以使用httplib
模块。 httplib.HTTPConnection()
您可以指定source_address
与您可以指定从中进行连接的端口元组,比如,这将连接到本地主机:1234从本地主机:9999:
import httplib
conn = httplib.HTTPConnection('localhost:1234', source_address=('localhost',9999))
conn.request('GET', '/index.html')
然后,它是我在刚才的答复中所述管理源端口分配的问题。 如果你在Windows下你可以使用这个方法来解决端口1024-5000的默认范围。
有(当然),上限到你要去多少个连接才能够使,这是值得商榷需要快速连续地使成千上万的连接什么样的应用程序。
作为mhawke建议,问题TIME_WAIT
似乎最有可能。 该系统广泛修复您的情况可能是这样,这样的连接更经常清理调整内核参数。 有两种选择:
$ sysctl net.ipv4.tcp_tw_recycle=1
这将让内核重用连接TIME_WAIT
状态。 这可能会导致NAT设置的问题。 另一条是:
$ sysctl net.ipv4.tcp_max_orphans=8192
$ sysctl net.ipv4.tcp_orphan_retries=1
这告诉内核最多保留8192
不依附于任何用户进程的连接,并能查杀TCP连接之前重试一次。
请注意,这些都不是永久性的变化。 添加设置/etc/sysctl.conf
,使他们永久。
http://code.google.com/p/lusca-cache/issues/detail?id=89#c4
http://tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.kernel.obscure.html
我有过类似的问题,但使用POST命令使用python的要求图书馆虽然是! 更糟糕的是,我用多了每个执行张贴到服务器。 所以数千个连接在了每几秒钟改变从TIME_WAIT状态和释放的端口为下一组的连接秒创建。
出所有可用过禁用保持活着是讲互联网可用的解决方案,用的request.session()等人使用,我发现这个答案是工作,这使得使用“连接”的:“关闭”配置头参数。 您可能需要将头内容在后命令之外的separte线虽然。
headers = {
'Connection': 'close'
}
with requests.Session() as session:
response = session.post('https://xx.xxx.xxx.x/xxxxxx/x', headers=headers, files=files, verify=False)
results = response.json()
print results
只要给它要求图书馆一试。