Уведомления

Группа в Telegram: @pythonsu

#1 Июль 3, 2012 00:20:06

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Ctrl+C

Можно как-то сделать так, чтобы интерпретатор питона по ctrl+c сразу сдыхал, как это делают некоторые, например, перл?

Есть некоторые написанные альтернативно одаренными прогерами модули (среди них, кстати, grab), которые эту комбинацию тупо игнорят.

Офлайн

#2 Июль 3, 2012 00:26:44

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Ctrl+C

Раскладку надо переключать. Ctrl+C просто посылает SIGINT. Если модуль ловит KeyboardInterrupt или использует свой хэндлер для сигнала, то можно обнажиматься.

Да и никто не мешает сделать Ctrl+Z && kill -9 pid.



Отредактировано fata1ex (Июль 3, 2012 00:28:09)

Офлайн

#3 Июль 3, 2012 14:35:13

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Ctrl+C

fata1ex
Раскладку надо переключать.
?

fata1ex
Да и никто не мешает сделать Ctrl+Z && kill -9 pid.
А под виндой? Никто не мешает запустить process explorer, найти нужный процесс питона итд?

Офлайн

#4 Июль 3, 2012 15:31:14

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Ctrl+C

odnochlen надо перехватить нажатия самому и закрыть программу самому

Офлайн

#5 Июль 3, 2012 15:43:22

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Ctrl+C

А как?

Офлайн

#6 Июль 3, 2012 18:52:46

EBFE
Зарегистрирован: 2012-07-03
Сообщения: 99
Репутация: +  20  -
Профиль   Отправить e-mail  

Ctrl+C

Под виндой: Ctrl + Break (SIGBREAK) *http://en.wikipedia.org/wiki/Break_key*

odnochlen
ативно одаренными прогерами модули (среди них, кстати, grab), которые эту комбинацию тупо игнорят.
Ну по идее модулю не обязательно ловить Ctrl + C => KeyboardInterrupt и тупо игнорить. Вполне достаточно вызова функций из библиотек на C/etc. Или же мешает сам GIL.
PoC:
>>> max(xrange(2**30))
KeyboardInterrupt не ловится, но и Ctrl+C не работает

Офлайн

#7 Июль 3, 2012 19:33:42

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Ctrl+C

EBFE
Под виндой: Ctrl + Break (SIGBREAK) *http://en.wikipedia.org/wiki/Break_key*
А это не одно и то же?

EBFE
KeyboardInterrupt не ловится, но и Ctrl+C не работает
Да, блокирующие вызовы вроде сокетов иирк тоже не реагируют. Что делать?

Офлайн

#8 Июль 3, 2012 20:24:51

EBFE
Зарегистрирован: 2012-07-03
Сообщения: 99
Репутация: +  20  -
Профиль   Отправить e-mail  

Ctrl+C

odnochlen
А это не одно и то же?
Нет. http://msdn.microsoft.com/en-us/library/windows/desktop/ms682541(v=vs.85).aspx
SIGBREAK вообще не входит в POSIX
Да, блокирующие вызовы вроде сокетов иирк тоже не реагируют. Что делать?
Жать CRTL+BREAK ну или переходить на Py 3.2 - там вроде бы изменили GIL
Wikipedia
В версии 3.2 будет внедрён изменённый GIL. Основные нововведения:

* Переключение по таймауту, а не по количеству опкодов — в предыдущей версии GIL освобождался через каждые 100 операций. Но операция может выполняться от наносекунд, до долей секунд. В новой версии блокировка будет сниматься каждые 5 миллисекунд;

Отредактировано EBFE (Июль 3, 2012 20:30:34)

Офлайн

#9 Июль 3, 2012 21:33:49

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Ctrl+C

А какое отношение GIL имеет к блокирующим операциям?

Хаха, хорошо ты подсказал. Ctrl+Break сразу грохает процесс. А на юнипсах оно будет работать?

Отредактировано odnochlen (Июль 3, 2012 21:52:07)

Офлайн

#10 Июль 3, 2012 22:59:44

EBFE
Зарегистрирован: 2012-07-03
Сообщения: 99
Репутация: +  20  -
Профиль   Отправить e-mail  

Ctrl+C

odnochlen
А какое отношение GIL имеет к блокирующим операциям?
Тайна сия великая есть (короче, не знаю я) . В этом случае может быть и не GIL виноват а сам интерпретатор.
Просто на Jython max(xrange(2**30)) прекрасно “убивается” Ctrl+C. Правда в PyPy тоже

Ctrl+Break сразу грохает процесс. А на юнипсах оно будет работать?
В bash: CTRL + Z && bg && kill $!
Ну или как писал fata1ex. Если есть желание (и нечего делать), можно и к юникс SIGBREAK приделать.

Отредактировано EBFE (Июль 3, 2012 23:03:50)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version