Уведомления

Группа в Telegram: @pythonsu

#1 Март 15, 2010 20:21:58

GoldFinch
От:
Зарегистрирован: 2010-03-15
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

IDLE+Windows+socket.bind()

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, то в каких ИДЕ этого нет?



Офлайн

#2 Март 15, 2010 21:00:07

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

IDLE+Windows+socket.bind()

Это ваша ошибка. Сокеты закрывать нужно…
На каком языке программирование вы видели другое поведение?



Офлайн

#3 Март 15, 2010 21:22:29

GoldFinch
От:
Зарегистрирован: 2010-03-15
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

IDLE+Windows+socket.bind()

Андрей Светлов
в любом нативном.
при закрытии программы все ресурсы освобождает ОС.

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



Офлайн

#4 Март 16, 2010 11:50:36

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

IDLE+Windows+socket.bind()

что делать-то, если программа при отладке упала и сокет оказался не закрыт?
Использовать исключения.

Офлайн

#5 Март 16, 2010 13:00:27

GoldFinch
От:
Зарегистрирован: 2010-03-15
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

IDLE+Windows+socket.bind()

Ferroman
я не совсем понял, вы советуете каждую строчку кода в try/except заворачивать?

и как это поможет от перезапуска программы?
или про перезапуск следует забыть?



Отредактировано (Март 16, 2010 13:03:12)

Офлайн

#6 Март 16, 2010 13:13:44

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

IDLE+Windows+socket.bind()

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

По поводу перезапуска программы - я так и не понял сути вашей проблемы.

Офлайн

#7 Март 16, 2010 13:38:05

GoldFinch
От:
Зарегистрирован: 2010-03-15
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

IDLE+Windows+socket.bind()

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

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

какие “штатные методы обеспечения стабильности и безопасности работы” позволяют освободить системные ресурсы когда программу перезапускают из IDLE?



Офлайн

#8 Март 16, 2010 14:00:08

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

IDLE+Windows+socket.bind()

Из IDLE - понятияне имею, не пользуюсь. Про исключения, finally вы пропустили?

Офлайн

#9 Март 16, 2010 17:40:21

GoldFinch
От:
Зарегистрирован: 2010-03-15
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

IDLE+Windows+socket.bind()

Ferroman
Из IDLE - понятияне имею, не пользуюсь
заголовок темы вы наверное не читали, первый пост по видимому тоже.



Офлайн

#10 Март 16, 2010 18:49:42

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

IDLE+Windows+socket.bind()

Я вопрос читал. Только вы ответы не читаете.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version