Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 17, 2016 16:54:31

Xion
Зарегистрирован: 2016-01-17
Сообщения: 21
Репутация: +  0  -
Профиль  

[threading] Как отдебажить потоки

Играюсь с потоками и встретился с таким моментом что исключения не выводятся в потоках, то есть тред просто помирает в тишине и не понятно из за чего
Проверять каждую строку print'ом или assert'ом мне кажется не вариант, есть ли какой то способ понять в чем трабл

Офлайн

#2 Янв. 17, 2016 17:05:58

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

[threading] Как отдебажить потоки

где код?



Офлайн

#3 Янв. 19, 2016 10:08:56

Xion
Зарегистрирован: 2016-01-17
Сообщения: 21
Репутация: +  0  -
Профиль  

[threading] Как отдебажить потоки

Методом подбора удалось определить что для requests.get был необходим Lock():

В коде использовано 100 потоков с запуском функции, часть кода которой ниже:

lock = threading.Lock()
def req(q):
  while not q.empty():
    with lock:
      try: r = requests.get('some_url', timeout=5)
      except Exception: continue

Может кто объяснить почему? и как можно дебажить такие случаи?
Если Lock() нет, то программа тупо виснет

Отредактировано Xion (Янв. 19, 2016 10:09:12)

Офлайн

#4 Янв. 21, 2016 11:35:41

infoing
От:
Зарегистрирован: 2010-09-06
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

[threading] Как отдебажить потоки

Можно записями в лог дебажить. Естественно, у каждой записи должен быть проставлен идентификатор потока, чтобы по логу потом можно было понять где и что происходит.
PyCharm вроде поддерживает отладку потоков.



Офлайн

#5 Янв. 21, 2016 13:23:34

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

[threading] Как отдебажить потоки

Xion
Методом подбора удалось определить что для requests.get был необходим Lock():В коде использовано 100 потоков с запуском функции, часть кода которой ниже:
А если try - except убрать?

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version