Игнат
Фев. 24, 2011 15:08:55
проблема такая: запускаю скажем 12 потоков, каждый делает свою работу - качает обычные веб-странички
если работы немного - все заканчивают работу нормально
но если сделать так, чтобы они скачивали больше страниц - не все потоки заканчивают свою работу
как будто чем больше работы - тем больше потоков зависает
соответственно счетчик активных потоков замирает на 1-2, в лог больше ничего не выводится - просто останавливается на любой задаче
сам ГУИ не виснет - работает нормально, но если закрыть приложение - оно подвисает и приходится завершать его через диспетчер задач
очевидно что они как-то зависают и у них не вызывается process_result
подскажите, куда хотя бы копать? мб у питона есть какие-то лимиты на память или время работы, которые надо увеличить?
Soteric
Фев. 24, 2011 15:18:24
Игнат
Фев. 24, 2011 21:26:54
блин, ну очевидно же что оно мне не помогло никак
я попытался описать проблему иначе
я логировал каждое действие класса, работающего в потоке
и это дало мне лишь понимание того, что этот класс перестает работать на месте очередного запроса к серверу, который может и до этого выполняться несколько раз успешно
главное что process_result у потока не срабатывает
и никаких exception или ошибок нигде нет
все потоки закончили работу, а один, собака, просто повис!
и сейчас вот я уже окно закрыл, вроде не было такой реакции типа зависшее приложение - а в дебаггере процесс все ещё запущен и стоит на месте
Андрей Светлов
Фев. 24, 2011 21:31:48
Из вашего объяснения я понял, что заткнулся запрос к серверу. urllib или что вы там используете.
К потокам это никакого отношения не имеет - они работают как могут.
Игнат
Фев. 25, 2011 07:23:30
а как узнать почему он заткнулся?
upd: переписал класс работы с сетью на QNetworkAccessManager - проблема пропала
Андрей Светлов
Фев. 25, 2011 07:52:01
А как узнать, почему моя программа не работает?
Поставьте таймаут на сокет поменьше, чем стандартно выставляется.