पायथन [Errno 98] पहले से ही उपयोग में पता


96

अपने पायथन सॉकेट कार्यक्रम में, मुझे कभी-कभी इसके साथ हस्तक्षेप करने की आवश्यकता होती है Ctrl-C। जब मैं ऐसा करता हूं, तो यह कनेक्शन का उपयोग बंद कर देता है socket.close()

हालांकि, जब मैं इसे फिर से खोलने की कोशिश करता हूं तो मुझे इंतजार करना पड़ता है कि एक मिनट पहले क्या लगता है इससे पहले कि मैं फिर से कनेक्ट कर सकूं। एक सॉकेट को सही ढंग से कैसे बंद करता है? या यह इरादा है?

जवाबों:


120

हाँ, यह इरादा है। यहां आप विस्तृत विवरण पढ़ सकते हैं । सॉकेट पर SO_REUSEADDR विकल्प सेट करके इस व्यवहार को ओवरराइड करना संभव है। उदाहरण के लिए:

sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

अजीब। मैंने बाध्य करने से पहले इसे सही कहा है और त्रुटि अभी भी हो रही है। मुझे कहीं और गलती हो रही होगी।
बक्सर

कोई बात नहीं, मेरे पास एक विचित्र दौड़ की स्थिति थी जब मेरे स्वचालित परीक्षणों के लिए अलग-अलग थ्रेड्स पर बार-बार बांधना और बंद करना।
byxor

आपको सॉकेट नामक मॉड्यूल आयात करने की आवश्यकता है।
बार्टोज़

32
$ ps -fA | grep python
501 81211 12368   0  10:11PM ttys000    0:03.12  
python -m SimpleHTTPServer

$ kill 81211

2
दुर्भाग्य से, यह हमेशा काम नहीं करता है। जब मैंने इस समस्या में भाग लिया, तो यह मेरा तत्काल विचार था, लेकिन मेरे मामले में मारने की कोई अजगर प्रक्रिया नहीं है।
क्रिएटन

22

यदि आप सॉकेटसर्वर मॉड्यूल में एक TCPServer, UDPServer या उनके उपवर्गों का उपयोग करते हैं, तो आप इस वर्ग चर (एक सर्वर को संस्थापित करने से पहले) सेट कर सकते हैं:

SocketServer.TCPServer.allow_reuse_address = True

( सॉकेटसर्वर के माध्यम से। थ्रेडिंग सेंटरपावर - प्रोग्राम रिस्टार्ट होने के बाद पता करने के लिए बाध्य नहीं किया जा सकता )

यह init (निर्माता) का कारण बनता है:

 if self.allow_reuse_address:
     self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

13

क्योंकि आप उसी पोर्ट में सेवा चलाने का प्रयास कर रहे हैं जो पहले से चल रहा है।

कुछ समय बाद ऐसा होता है क्योंकि आपकी सेवा प्रक्रिया स्टैक में नहीं रुकती है। आपको उन्हें मारना होगा

यहां कुछ भी स्थापित करने की आवश्यकता नहीं है सभी चल रहे अजगर प्रक्रियाओं को मारने के लिए एक पंक्ति कमांड है।

Linux के लिए OS आधारित:

दे घुमा के:

kill -9 $(ps -A | grep python | awk '{print $1}')

मछली:

kill -9 (ps -A | grep python | awk '{print $1}')

1
मेरे लिए काम किया धन्यवाद!
कोड

1
मेरे लिए काम किया धन्यवाद
user007

7

कॉल करने से पहले, इस आदेश के साथ एक उपप्रकार चलाने के अलावा मेरे लिए कुछ भी काम नहीं किया गया HTTPServer(('', 443), myHandler):

kill -9 $(lsof -ti tcp:443)

बेशक यह केवल लिनक्स जैसे ओएस के लिए है!



4

सबसे पहले इस कमांड का उपयोग करते हुए पायथन प्रक्रिया आईडी खोजें

ps -fA | grep python

आपको दूसरे कॉलम पर अपनी पायथन प्रक्रिया का नाम देकर एक पिड नंबर मिलेगा

फिर इस कमांड का उपयोग करके प्रक्रिया को मारें

kill -9 pid

0

एक ही त्रुटि मिली:
चरणों का पालन किया:
1 - $ ps -fA | grep python
2 का उपयोग किया - सभी प्रक्रिया को मार डाला
3 - बंद टर्मिनल
4 - relaunced और आवेदन (mkchromecast) का शुभारंभ किया।
5 - यह त्रुटि संदेश नहीं मिला।

एक और मुद्दा मिल गया। उस पर चल रहा है।


0

कमांड चलाएं

fuser -k (port_number_you_are _trying_to_access)/TCP

फ्लास्क के लिए उदाहरण: fuser -k 5000/tcp

यह भी याद रखें कि जब आप ctrl + z द्वारा इंटरप्ट करते हैं तो यह त्रुटि उत्पन्न होती है। तो ctrl + c का उपयोग समाप्त करने के लिए

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.