পাইথন [এর্নো 98] ঠিকানা ইতিমধ্যে ব্যবহৃত


96

আমার পাইথন সকেট প্রোগ্রামে আমার মাঝে মাঝে এটির সাথে বাধা দেওয়া প্রয়োজন Ctrl-C । যখন আমি এটি করি, এটি ব্যবহার করে সংযোগটি বন্ধ করে দেয় socket.close()

যাইহোক, আমি যখন এটি পুনরায় খোলার চেষ্টা করব তখন আমি আবার সংযোগের আগে এক মিনিটের মতো দেখতে অপেক্ষা করতে হবে। কীভাবে একটি সঠিকভাবে একটি সকেট বন্ধ করে? নাকি এই উদ্দেশ্য?

উত্তর:


120

হ্যাঁ, এটা উদ্দেশ্য। এখানে আপনি বিস্তারিত ব্যাখ্যা পড়তে পারেন । সকেটে SO_REUSEADDR বিকল্পটি সেট করে এই আচরণটি ওভাররাইড করা সম্ভব। উদাহরণ স্বরূপ:

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

অদ্ভুত। বাঁধার আগে আমি এই অধিকারটি ডেকেছি এবং ত্রুটি এখনও ঘটছে। আমি অবশ্যই অন্য কোথাও একটি ভুল করছি।
বাইসোর

কিছুই নয়, আমার স্বয়ংক্রিয় পরীক্ষার জন্য পৃথক থ্রেডে বারবার বাঁধাই এবং বন্ধ করার সময় আমার একটি উদ্ভট প্রতিযোগিতার অবস্থা ছিল।
বাইকসর

আপনাকে সকেট নামক মডিউল আমদানি করতে হবে।
বার্তোসজ

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

$ kill 81211

4
দুর্ভাগ্যক্রমে, এটি সবসময় কাজ করে না। আমি যখন এই সমস্যায় পড়ি তখন এটিই ছিল আমার তাত্ক্ষণিক চিন্তা, তবে আমার ক্ষেত্রে মেরে ফেলার অজগর প্রক্রিয়া নেই।
ক্রাইটেন

22

আপনি যদি সকেট সার্ভার মডিউলে কোনও টিসিপিএস সার্ভার, ইউডিপিএসবার বা তাদের সাবক্ল্যাস ব্যবহার করেন তবে আপনি এই শ্রেণিটি পরিবর্তনশীল (কোনও সার্ভার ইনস্ট্যান্সেট করার আগে) সেট করতে পারেন:

SocketServer.TCPServer.allow_reuse_address = True

(মাধ্যমে SocketServer.ThreadingTCPServer - প্রোগ্রাম পুনরারম্ভ করবেন তখন এটি ঠিকানায় আবদ্ধ করা যাবে না )

এটি init (কনস্ট্রাক্টর) এর কারণে:

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

14

কারণ আপনি ইতিমধ্যে চলমান একই বন্দরে পরিষেবা চালানোর চেষ্টা করছেন।

কিছু সময় এটি ঘটে কারণ আপনার পরিষেবা প্রক্রিয়া স্ট্যাক বন্ধ না করে। আপনি তাদের হত্যা করতে হবে

এখানে কিছু ইনস্টল করার দরকার নেই সমস্ত চলমান অজগর প্রক্রিয়াটি মেরে ফেলার জন্য এক লাইন কমান্ড।

লিনাক্স ভিত্তিক ওএসের জন্য:

বাশ:

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

মাছ:

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

4
আমার জন্য কাজ ধন্যবাদ ধন্যবাদ!
কোড

4
আমার জন্য ধন্যবাদ ধন্যবাদ
ব্যবহারকারী 700


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 - অ্যাপ্লিকেশনটি পুনরায় শুরু হয়েছে এবং অ্যাপ্লিকেশনটি চালু করেছে (mkchromecast)।
5 - এই ত্রুটি বার্তাটি পাইনি।

অন্য একটি সমস্যা পেয়েছেন। যে অনুসরণ করা।


0

কমান্ড চালান

fuser -k (port_number_you_are _trying_to_access)/TCP

ফ্লাস্কের উদাহরণ: fuser -k 5000/tcp

এছাড়াও, মনে রাখবেন যে আপনি যখন ctrl + z দিয়ে ইন্টারপুট করবেন তখন এই ত্রুটি দেখা দেয়। সুতরাং ব্যবহার বন্ধ করুন ctrl + c

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.