2015-06-19 74 views
5
requests.exceptions.ConnectionError: ('Connection aborted.', error(99, 'Cannot assign requested address')) 

运行多个程序时使用蟒蛇请求库并调用post功能,这是恢复非常迅速(< 10ms)的一个API,我得到这个错误。请求,无法分配请求的地址,端口?

拨号向下运行的过程的数量有延迟作用,但仅在拨号降到1个处理消除的问题。这不是一个解决方案,但确实表明有限的资源是罪魁祸首。

+0

打开出站TCP连接随机分配一个随机端口号在高范围内(IIRC,最大值为〜64k;在范围开始的地方,vs与为入站使用而保留的端口是可配置的)。因此,如果你有大量的出站TCP连接同时打开,无论使用什么库/编程语言等。你正在使用,你很容易碰到这个问题。 –

+1

本答案注明可用端口范围是32768到61000.所以可用端口数= 61000-32768 + 1 = 28233 http://stackoverflow.com/a/11208991/1942007 感谢您的评论! – Garren

回答

12

我解决我的问题的方法是使用requests.Session类在那里我会重复使用相同的连接/会话在一个给定的过程中的每个电话。

人为的例子:

import requests 
for line in file: 
    requests.get('http://example.com/api?key={key}'.format(key=line['key'])) 

成为

import requests 
with requests.Session() as session: 
    for line in file: 
    session.get('http://example.com/api?key={key}'.format(key=line['key'])) 

这些问题有一些相关的建议:

Repeated POST request is causing error "socket.error: (99, 'Cannot assign requested address')" Python urllib2: Cannot assign requested address

相关问题