2015-06-19 101 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

相關問題