Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 16, 2014 08:15:43

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Где он? Дискуссия о Core DUMP.

:)
Вопрос: Почему у python нет функций сохранения на диск полного состояния интерпретатора и восстановления этого состояния?

А именно в чем концептуальные плюсы и минусы такого свойства?

Можно придумать достаточно много способов применения этой фичи.

Плюсы:
1. У пользователя навернулась программа. Он вам шлет полное состояние. Разбирайся - все под рукой. Это более полный аналог core dump. Прям как анатомичке - вот вам globals вот вам стек программ, а вот рядом с селезенкой - gc прилепился… Опять-же студентам на лекции по питону рассказывать про его устройство будет проще. Сейчас можно для этого использовать отладчик, Но 50 работающих питонов это уже перебор.

2 Как в играх. Отлаживал отлаживал, интерпретировал интерпретировал. Перед важным моментом бабах - save game. И можно на обед прерваться и не бояться краха всего после очередной инструкции.

3 Как показывает практика часто надо сравнивать состояния системы до и после внесения изменений - один из вариантов - сравнить дампы (конечно нужно чтобы у них можно было сравнивать части).

Конечно есть и сложности. Не сохраняется окружение программы - открытые сокеты файлы, состояния подгружаемых бинарных библиотек. Формат файла скорее должен быть иерархическим а не потоковым чтобы было проще разбираться. Что такое состояние программы на текущий момент в многопоточном приложении это тоже отдельный философский вопрос.

Это вопрос и к молодым и к более опытным коллегам. Может я просто не знаю и эти функции есть? Если нет, может нам для трешки их сделать? Как бы вы могли использовать такие функции?

Если реализовать - то питончик будет круче всех ЯП. Я по крайней мере не знаю других языков имеющих подобную функциональность.





Отредактировано doza_and (Фев. 16, 2014 08:23:07)

Офлайн

#2 Фев. 16, 2014 10:11:36

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Где он? Дискуссия о Core DUMP.

звучит интересно с точки зрения технической фичи. На счет всего остального думаю думы.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Фев. 16, 2014 10:19:38

wbt
Зарегистрирован: 2013-08-13
Сообщения: 143
Репутация: +  6  -
Профиль   Отправить e-mail  

Где он? Дискуссия о Core DUMP.

а если с помощью pickle засуспендить globals() и locals()?



Бейсик - не порок, Гвидо - не пророк

Офлайн

#4 Фев. 16, 2014 11:08:29

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Где он? Дискуссия о Core DUMP.

1. Чтобы получить расширенную информацию Питон нужно собирать с ключом –with-pydebug, но это скажется на производительности, поэтому для продакшн не подходит.
2. Остальное можно получить с помощью sys, inspect и traceback.
3. Существует ли готовый модуль для облегчения работы с п.2 я не знаю. Если да, то как его заставить переключаться между режимами production, debug на лету?
Часть информации можно снять в обработке исключений или contextlib, но это увеличит кол-во кода. Стоит ли шкурка вычинки?



Офлайн

#5 Фев. 16, 2014 11:10:26

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Где он? Дискуссия о Core DUMP.

wbt
а если с помощью pickle засуспендить
Тогда уж locals() globals() и состояние стека. Я так и делаю в сложных случаях. Вопрос в том что может быть полезно еще уметь восстанавливать состояние VM. Это дело уже ядра системы. Кроме того обычные пиклы не очень удобны для offline анализа. Дело в том что при их загрузке надо чтобы были известны все классы, а классы как вы понимаете тоже будут в этих пиклах. :) т.е. не получается универсальной утилиты для анализа пиклов. Может их парами сохранять? Не универсальный инструмент рассчитанный только на встроенные типы мы уже для себя сделали (поддерживаются list map,numpy,ctypes объекты). Правда на wxPython. Наверное надо будет переделать в ближайшем будущем.



Офлайн

#6 Фев. 16, 2014 11:14:19

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Где он? Дискуссия о Core DUMP.

Lexander
Питон нужно собирать с ключом …
Безусловно надо чтобы работало в продакшене. Иначе оно вообще смысл теряет. И конечно большая часть информации доступна и так. Не зря питон славится хорошими возможностями по интроспекции.



Офлайн

#7 Фев. 16, 2014 11:15:30

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Где он? Дискуссия о Core DUMP.

Для почитать о состоянии дел по теме core dump и его анализа:
http://www.zemanta.com/blog/python-gdb-large-core-dump/



Офлайн

#8 Фев. 16, 2014 11:22:19

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Где он? Дискуссия о Core DUMP.

Ну и пару приемов, кроме общесистемного core dump, который обычно автоматически пишет система при seg fault процесса или с помощью системных утилит для получения core dump процесса:
1. https://github.com/gooli/pydump
2. программный вызов os.abort() внутри программы, по идее тоже должен вызвать перехват ситуации системой и последующий автоматический core dump



Офлайн

#9 Фев. 20, 2014 13:29:56

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Где он? Дискуссия о Core DUMP.

не core dump, но сохранение состояния есть у twisted, в twistd stop команде

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version