Быстрый способ протестировать, если порт используется с помощью Python

У меня есть сервер Python, который слушает на паре сокетов. При запуске я пытаюсь соединиться с этими сокетами перед слушанием, таким образом, я могу быть уверен, что ничто иное уже не использует тот порт. Это добавляет приблизительно три секунды к запуску моего сервера (который составляет приблизительно.54 секунд без теста), и я хотел бы обрезать его вниз. Так как я только тестирую localhost, я думаю, что тайм-аут приблизительно 50 миллисекунд более, чем вполне достаточен для этого. К сожалению, socket.setdefaulttimeout (50) метод, кажется, не работает по некоторым причинам.

Как я могу обрезать это вниз?

9
задан directedition 18 March 2010 в 15:21
поделиться

3 ответа

Как насчет того, чтобы просто попытаться выполнить привязку к нужному порту и обработать случай ошибки, если порт занят? (Если проблема заключается в том, что вы можете запустить одну и ту же службу дважды, а затем не смотреть на открытые порты.)

Это также разумный способ избежать возникновения состояния гонки, как сказал @eemz в другом ответе.

9
ответ дан 4 December 2019 в 06:16
поделиться

Вы используете Linux? Если это так, возможно, ваше приложение может запустить netstat -lant (или netstat -lanu , если вы используете UDP) и посмотреть, какие порты используются. Это должно быть быстрее ...

1
ответ дан 4 December 2019 в 06:16
поделиться

Ответ Саймона Б - это правильный путь - ничего не проверяйте, просто попробуйте привязать и обработать случай ошибки, если он уже используется.

В противном случае вы находитесь в состоянии гонки, когда какое-то другое приложение может захватить порт между вашей проверкой, что он свободен, и вашей последующей попыткой привязаться к нему. Это означает, что вам все равно придется обрабатывать возможность того, что ваш вызов привязки не удастся, поэтому предварительная проверка ничего не дала.

1
ответ дан 4 December 2019 в 06:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: