Opravit chybu Python Socket 48
Chyba zásuvky 48 je chyba pythonu, která se aktivuje, když se proces pokusí navázat na port, který se již používá.
Co způsobuje chybu „socket.error: [Errno 48] Address already in use“ Chyba?
Po krátkém výzkumu jsme zjistili, že příčiny jsou:
- Proces vázán na port:Kdykoli je na serveru vytvořen proces, používá jej port ke komunikaci s internetem. Přístav je jako hostitel, který dokáže pobavit jednoho hosta najednou. Pokud však nezadáte port, server jej pouze vytvoří na výchozím portu. Při příštím vytváření procesu je třeba zadat port, protože výchozí port je již používán.
Řešení 1: Zadání čísla portu
Chyba se většinou spustí, když se osoba pokusí svázat určitý proces s výchozím portem a výchozí port je již vázán na jiný proces. V tomto kroku tedy budeme specifikovat port, na kterém má být proces omezen.
- Je pravděpodobné, že k vytvoření procesu používáte následující příkaz.
$ python -m SimpleHTTPServer
- Místo toho použijte tento příkaz k vytvoření procesu.
$ python -m SimpleHTTPServer (číslo portu)
- Počkejte na vytvoření procesu a zkontrolujte, zda problém přetrvává.
Řešení 2: Uvolnění portu
Pokud je port již používán jiným procesem, nový proces nebude na tomto portu fungovat. V tomto kroku proto uvolníme port ukončením předchozího procesu a následným spuštěním nového. Pro to:
- Pomocí následujícího příkazu zobrazíte seznam procesů využívajících konkrétní port.
$ ps -fA | grep python
- Argument příkazu bude vypadat podobně jako následující řádky.
601 88234 12788 0 21:53 ttys000 0: 00,16 python -m SimpleHTTPServer
- Z toho je kód procesu, který použijeme k zabití, „88234“.
- K ukončení procesu použijte následující příkaz.
zabít 88234
Alternativně jej můžete zabít pomocí následujícího příkazu.
sudo kill -9 PID
- Nyní můžete proces svázat s tímto portem pomocí následujícího příkazu.
$ python -m SimpleHTTPServer (číslo portu)
- Proces bude nyní vytvořen.
Řešení 3: Restartování Raspberry Pi (pouze pro Raspberry Pi)
Této chyby se můžete zbavit na Raspberry Pi restartováním Raspberry Pi nebo zabitím terminálového shellu. Raspberry Pi někdy nedokáže automaticky zabít procesy a spustí tuto chybu kvůli předchozím procesům, které již na portech běží.