Привет! Я с удовольствием поделюсь с тобой своим опытом написания функции, которая на вход принимает порт и запускает по нему сервер․ Если порт будет занят, функция должна найти процесс по этому порту, завершить его и попытаться запустить сервер ещё раз․Вот мой код⁚
python
import os
import signal
from typing import List
def free_port(port⁚ int) -> None⁚
″″″Завершает процессы, занимающие переданный порт
Args⁚
port⁚ порт
″″″
pids⁚ List[int] get_pids(port)
for pid in pids⁚
try⁚
os․kill(pid, signal․SIGTERM)
print(f″Процесс с PID {pid} был успешно завершен″)
except OSError⁚ # Если процесс уже завершен
print(f″Процесс с PID {pid} уже завершен″)
# Здесь ты можешь запустить свой сервер
# Если нужно, можешь использовать функцию start_server(port), которую ты написал ранее
# start_server(port)
Добавь этот код в свою программу, чтобы использовать функцию `free_port`․ В ней мы сначала вызываем функцию `get_pids(port)`, которая возвращает список PID процессов, занимающих переданный порт․ Затем для каждого PID в списке мы вызываем `os․kill(pid, signal․SIGTERM)`, чтобы завершить процесс․
Важно отметить, что если процесс уже завершен, возникнет исключение `OSError`, и мы поймаем его с помощью конструкции `try-except`․ Если процесс успешно завершен, мы выведем сообщение об этом․ Теперь ты можешь использовать эту функцию, чтобы освободить занятый порт и запустить свой сервер․
Не забудь добавить нужные импорты и реализовать функцию `get_pids(port)`, которая будет возвращать список PID процессов, занимающих переданный порт․ Ее реализация может зависеть от твоей операционной системы․ Например, для Linux можно воспользоваться командой `lsof -t -i ⁚port`, а для Windows — командой `netstat -ano | findstr ⁚port`․