Найти - Пользователи
Полная версия: IDLE+Windows+socket.bind()
Начало » Инструментальные средства разработки » IDLE+Windows+socket.bind()
1
GoldFinch
python3.1-win32

запускаем IDLE, в диспетчере задач появляются два процесса pythonw
вводим “from socket import *;s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);s.bind(('', 8000))”
жмем рестарт (ctrl-F6)
диспетчере задач появляется еще один процесс pythonw (всего 3)
вводим “from socket import *;s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);s.bind(('', 8000))”
получаем ошибку что порт уже используется
через некоторое время лишний процесс pythonw умирает, порт освобождается

это ошибка питона или ошибка IDLE?
если ошибка IDLE, то в каких ИДЕ этого нет?
Андрей Светлов
Это ваша ошибка. Сокеты закрывать нужно…
На каком языке программирование вы видели другое поведение?
GoldFinch
Андрей Светлов
в любом нативном.
при закрытии программы все ресурсы освобождает ОС.

но допустим, это моя ошибка в коде - то что там не закрыт сокет.
как этот код отлаживать? я не умею писать программы, так чтобы *никогда* не было ошибок.
что делать-то, если программа при отладке упала и сокет оказался не закрыт?
Ferroman
что делать-то, если программа при отладке упала и сокет оказался не закрыт?
Использовать исключения.
GoldFinch
Ferroman
я не совсем понял, вы советуете каждую строчку кода в try/except заворачивать?

и как это поможет от перезапуска программы?
или про перезапуск следует забыть?
Ferroman
Я советую использовать штатные методы обеспечения стабильности и безопасности работы. Как вы их будете использовать - зависит от вашей квалификации. Хотите - заворачивайте каждую строчку. Ну или думайте, и заворачивайте только то, что надо.
Хотите писать программы с минимумом ошибок? Пишите тесты.
Для гарантированного выполнения при сбоях есть блок finally.

По поводу перезапуска программы - я так и не понял сути вашей проблемы.
GoldFinch
Ferroman
По поводу перезапуска программы - я так и не понял сути вашей проблемы.
IDLE использует два процесса pythonw, первый - для работы самой IDLE, второй - для работы программы.
при перезапуске программы в IDLE второй процесс не убивается, а продолжает жить некоторое время,
программа же запускается в новом (третьем) процессе pythonw

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

какие “штатные методы обеспечения стабильности и безопасности работы” позволяют освободить системные ресурсы когда программу перезапускают из IDLE?
Ferroman
Из IDLE - понятияне имею, не пользуюсь. Про исключения, finally вы пропустили?
GoldFinch
Ferroman
Из IDLE - понятияне имею, не пользуюсь
заголовок темы вы наверное не читали, первый пост по видимому тоже.
Ferroman
Я вопрос читал. Только вы ответы не читаете.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB