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

मैं जब कई चल रही प्रक्रियाओं अजगर अनुरोध पुस्तकालय का उपयोग और कहा कि बहुत जल्दी (< 10ms) लौट रहा था एक एपीआई के post फ़ंक्शन को कॉल इस त्रुटि हो रही थी।अनुरोध, बंदरगाहों से अनुरोधित पता असाइन नहीं कर सकते हैं?

चल रही प्रक्रियाओं की संख्या को डायल करने में देरी प्रभाव पड़ा, लेकिन केवल 1 प्रक्रिया तक डायलिंग करने से समस्या समाप्त हो गई। यह एक समाधान नहीं था, लेकिन एक सीमित संसाधन अपराधी था इंगित किया था।

+0

खुलने का एक आउटबाउंड TCP कनेक्शन बेतरतीब ढंग से एक यादृच्छिक प्रदान करती है:

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'])) 

ये सवाल कुछ संबंधित सलाह देनी हो जाता है एक उच्च श्रेणी में पोर्ट नंबर (आईआईआरसी, अधिकतम ~ 64k है; जहां सीमा शुरू होती है, बनाम बंदरगाहों को इनबाउंड उपयोग के लिए आरक्षित किया जाता है, विन्यास योग्य है)। इस प्रकार, यदि आपके पास एक ही समय में आउटबाउंड टीसीपी कनेक्शन की एक बड़ी संख्या है, तो कोई फर्क नहीं पड़ता कि लाइब्रेरी/प्रोग्रामिंग भाषा/आदि। आप इसका उपयोग कर रहे हैं, आप इस मुद्दे को मारने के लिए प्रवण हैं। –

+1

यह उत्तर नोट करता है कि उपलब्ध पोर्ट रेंज 32768 से 61000 है। इसलिए उपलब्ध बंदरगाहों की संख्या = 61000-32768 + 1 = 28233 http://stackoverflow.com/a/11208991/1942007 टिप्पणी के लिए धन्यवाद! – Garren

उत्तर

12

जिस तरह से मैंने अपनी समस्या का समाधान किया था, वह requests.Session कक्षा का उपयोग करना था जहां मैं किसी दिए गए प्रक्रिया में प्रत्येक कॉल के लिए एक ही कनेक्शन/सत्र का पुन: उपयोग करूंगा।

काल्पनिक उदाहरण:

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

संबंधित मुद्दे

 संबंधित मुद्दे