LINUX.ORG.RU

Отладка Python2 в prodruction.

 getmail,


1

1

Здравия.

Пользуюсь я тут getmail, и он иногда зависает: лог обрывается, процесс просто висит часами. Похоже на deal-lock какой-то. Как можно сделать слепок состояния всех потоков в Python2 на бегущем процессе без модификации исходника? Для Python3 есть такие прекрасные штуки как PYTHONFAULTHANDLER, -X faulthandler. К сожалению, они не доступны для Python2. А можно ли как-то увидеть состояние потоков для Python2? Питонисты, как вы отлаживаете такие ситуации?

Python2, Я.Почта (с гугловыми ящиками все норм).

★★★★★

Питонисты, как вы отлаживаете такие ситуации

Очевидно, умервщляем второй пистон

slaykovsky ★★★
()
Ответ на: комментарий от dem

Пробовал, но это нереально долго:
1. добавил пару print'ов
2. подождал пару дней
3. вернулся к пункту 1.

urxvt ★★★★★
() автор топика
Ответ на: комментарий от dem

Да я тоже, в основном, принтами пользуюсь, даже в Жабе, при наличии отличных отладчиков. Просто в данной ситуации это нереально долго. Если бы оно воспроизводилось легко. А так, то ли нужное письмо ждать нужно, то ли фазу луны.

urxvt ★★★★★
() автор топика
Последнее исправление: urxvt (всего исправлений: 1)
Ответ на: комментарий от urxvt

Слушай бомби сам эвенты. Чтоб 1000 запросов в секунду. Кстати мой вклад asyncio был как раз такой который хрен сделаешь....

dem ★★
()
Ответ на: комментарий от dem

Так это же getmail, аналог fetchmail — подключается к imap-серверу, забирает почту и выходит.

urxvt ★★★★★
() автор топика
Ответ на: комментарий от urxvt

Ну и дампи все. Можно сначала каждую секуннду погетать.....

dem ★★
()

Нашел такую интересную штуку, которая обвертка над gdb. Проверил в песочнице и оно вроде нормально работает. Всем спасибо.
https://github.com/wooparadog/pystack

$ sudo python2 pystack.py 29362
Dumping Threads....


  File "/usr/lib/python2.7/threading.py", line 774, in __bootstrap
    self.__bootstrap_inner()
  File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "treaddump.py", line 19, in b
    la.acquire()

---------------

  File "/usr/lib/python2.7/threading.py", line 774, in __bootstrap
    self.__bootstrap_inner()
  File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "treaddump.py", line 13, in a
    lb.acquire()

---------------

  File "treaddump.py", line 25, in <module>
    time.sleep(10000)
  File "<string>", line 1, in <module>
  File "<string>", line 1, in <module>
$

urxvt ★★★★★
() автор топика
Последнее исправление: urxvt (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.