Python [Errno 98] Alamat sudah digunakan


96

Dalam program soket Python saya, terkadang saya perlu menghentikannya dengan Ctrl-C. Ketika saya melakukan ini, itu menutup koneksi menggunakan socket.close().

Namun, ketika saya mencoba membukanya kembali, saya harus menunggu sebentar sebelum saya dapat menyambungkannya lagi. Bagaimana cara menutup soket dengan benar? Atau apakah ini dimaksudkan?

Jawaban:


120

Ya, itu memang dimaksudkan. Di sini Anda dapat membaca penjelasan detailnya . Dimungkinkan untuk mengesampingkan perilaku ini dengan mengatur opsi SO_REUSEADDR pada soket. Sebagai contoh:

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

Aneh. Saya sudah menelepon hak ini sebelum mengikat dan kesalahan masih terjadi. Saya pasti membuat kesalahan di tempat lain.
byxor

Tidak masalah, saya mengalami kondisi balapan yang aneh ketika berulang kali mengikat dan mematikan utas terpisah untuk pengujian otomatis saya.
byxor

Anda perlu mengimpor modul yang disebut soket.
Bartosz

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

$ kill 81211

2
Sayangnya, itu tidak selalu berhasil. Ini adalah pemikiran langsung saya ketika saya mengalami masalah ini, tetapi tidak ada proses python untuk dibunuh dalam kasus saya.
Kryten


14

karena Anda mencoba menjalankan layanan di port yang sama yang sudah berjalan.

beberapa kali ini terjadi karena layanan Anda tidak dihentikan dalam tumpukan proses. kamu harus membunuh mereka

tidak perlu menginstal apa pun di sini adalah perintah satu baris untuk mematikan semua proses python yang sedang berjalan.

untuk OS berbasis Linux:

Pesta:

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

Ikan:

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

1
Bekerja untuk saya Terima kasih!
Kode

1
Bekerja untuk saya Terima kasih
pengguna007


7

Tidak ada yang berhasil untuk saya kecuali menjalankan subproses dengan perintah ini, sebelum memanggil HTTPServer(('', 443), myHandler):

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

Tentu saja ini hanya untuk OS yang mirip linux!


4

Pertama-tama temukan ID proses python menggunakan perintah ini

ps -fA | grep python

Anda akan mendapatkan nomor pid dengan menamai proses python Anda di kolom kedua

Kemudian matikan proses menggunakan perintah ini

kill -9 pid

0

Mendapat kesalahan yang sama:
Langkah-langkah yang diikuti:
1 - digunakan $ ps -fA | grep python
2 - Membunuh semua proses
3 - Terminal tertutup
4 - melepaskan dan meluncurkan aplikasi (mkchromecast).
5 - tidak mendapatkan pesan kesalahan ini.

Punya masalah lain. menindaklanjuti itu.


0

jalankan perintahnya

fuser -k (port_number_you_are _trying_to_access)/TCP

contoh untuk labu: fuser -k 5000/tcp

Juga, ingat kesalahan ini muncul saat Anda melakukan interput dengan ctrl + z. jadi untuk menghentikan gunakan ctrl + c

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.