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

Tôi đã gặp phải lỗi này khi chạy nhiều quy trình sử dụng thư viện yêu cầu python và gọi hàm post cho API đang trả về rất nhanh (< 10ms)., không thể gán địa chỉ được yêu cầu, ngoài cổng?

Quay số xuống quá trình chạy có hiệu ứng trì hoãn nhưng chỉ quay số xuống 1 quy trình đã loại bỏ sự cố. Đây không phải là một giải pháp, nhưng đã chỉ ra một nguồn lực hữu hạn là thủ phạm.

+0

Mở một kết nối TCP ra bên ngoài một cách ngẫu nhiên gán ngẫu nhiên số cổng trong một phạm vi cao (IIRC, tối đa là ~ 64k; nơi phạm vi bắt đầu, so với các cổng dành riêng cho việc sử dụng trong nước, có thể cấu hình được). Vì vậy, nếu bạn có một số lượng lớn các kết nối TCP gửi đi mở cùng một lúc, bất kể thư viện/ngôn ngữ lập trình/etc là gì. bạn đang sử dụng, bạn có khả năng gặp vấn đề này. –

+1

Câu trả lời này ghi chú phạm vi cổng khả dụng là 32768 qua 61000. Vì vậy, số cổng khả dụng = 61000-32768 + 1 = 28233 http://stackoverflow.com/a/11208991/1942007 Cảm ơn nhận xét! – Garren

Trả lời

12

Cách tôi giải quyết vấn đề của mình là sử dụng lớp requests.Session nơi tôi sẽ sử dụng lại cùng một kết nối/phiên cho mỗi cuộc gọi trong một quy trình nhất định.

ví dụ contrived:

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

trở thành

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

Những câu hỏi này đã có một số lời khuyên liên quan:

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

Các vấn đề liên quan