|
295 / 108 / 57
Регистрация: 07.12.2016
Сообщений: 209
|
|
Обновление главного окна в PyQt507.12.2016, 15:50. Показов 19433. Ответов 38
Метки нет (Все метки)
Доброго Всем времени суток. Наверное уже не раз создавались подобные темы, но ответа на свой вопрос так и не нашел( Поэтому спрошу еще раз, уж извиняйте. Вообщем имеется прога на питоне(3.5.2) По сути брут-перебиралка. На указанном сайте проверяет логины(зарегистрирован такой или нет). Делает она это через прокси, естественно. В консольной версии отрабатывает на ура и без проблем. В оконной же версии(через PyQt 5.6) прога отрабатывает свой цикл, но при этом главное окно “зависает”. Что мы делаем в главном окне: Выбираем файл с прокси(он добавляется в очередь Queue). Выбираем файл с логинами(он тоже добавляется в очередь Queue, но уже в другую). Выставляем кол-во потоков(модуль threading), задаём таймаут соединения(модуль grab), выбираем тип прокси(http/socks), указываем куда сохранить результат. Далее запускаем обработку в несколько потоков через threading. Во время обработки, если прокси сервер не срабатывает(через try - except), то логин снова добавляется в очередь. Если прокси в очереди закончились, то файл открывается заного и создаётся снова очередь с прокси. И так, пока не закончатся все логины. 'Хорошие логины' добавляются в список и потом отдельной функцией записываются в файл(результат, который указали при выборе сохранения). В инете встречаются примеры через QThread, либо QObject. Но все они для PyQt4. Хотелось бы понять вообще принцип - какие именно данные засовывать в QThread, либо QObject. Надо ли использовать питоновский модуль threading или все реализовывать через QTread. Вообщем смысл - чтобы главное окно не зависало(оно отображает еще промежуточную информацию через лейблы - сколько чего проверилось)
0
|
|
| 07.12.2016, 15:50 | |
|
Ответы с готовыми решениями:
38
Дублирование главного окна при открытии нового окна PyQt5 При запуске окна из другого окна, методы класса не работают
|
|
|
|||||||||||
| 08.12.2016, 21:52 | |||||||||||
|
Можешь делать несколько раз запросы:
В большинстве случаев подобная асинхронка это неудобно, но для большинства случаев есть requests. Конкретно в данном случае может подойти.
0
|
|||||||||||
|
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
|
||
| 08.12.2016, 22:18 | ||
|
0
|
||
|
295 / 108 / 57
Регистрация: 07.12.2016
Сообщений: 209
|
|
| 08.12.2016, 22:20 [ТС] | |
|
Ух, сколько всего почитать)) я, как новичек, пока еще по простому пути. Разберусь в нём, а уж потом усложнять потихоньку)) А, кстати, по поводу модуля requests. Использовал его вначале, но потом, как оказалось он не обрабатывает SOCK5. Тупо игнорит его и запускает напрямую, не кидая никаких ошибок. Тестировал на нескольких ресурсах и везде показывал мой чистый IP. Спасибо вам большое за ответы. Буду разбираться
0
|
|
|
|
|||
| 08.12.2016, 22:44 | |||
|
В таких случаях лучше потоки имею ввиду реальные потоки, а не "псевдо" как python
0
|
|||
|
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
|
|||
| 08.12.2016, 22:52 | |||
|
0
|
|||
|
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
|
|||
| 08.12.2016, 23:05 | |||
|
0
|
|||
|
|
||||||||
| 08.12.2016, 23:41 | ||||||||
Слабо себе представляю что бы он нормально выглядело.
0
|
||||||||
|
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
|
|||||||
| 09.12.2016, 10:48 | |||||||
|
Avazart, вот пример у меня на компе завалялся, только тут в старом стиле оформлено, сейчас нужно использовать async и await.
0
|
|||||||
|
|
|
| 09.12.2016, 11:11 | |
|
Ну так где тут цепочка взаимосвязанных запросов?
Типа авторизация - парсинг - запрос1 - парсинг +запрос2- .... Ясное дело что если нужно делать по одному запросу то выглядит нормально, проблема возникает когда нужно делать параллельно "целые сессии".
0
|
|
|
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
|
|
| 09.12.2016, 11:39 | |
|
Avazart, это один из примеров. С сессиями тоже сильно большого треша не будет.
0
|
|
|
|
|
| 09.12.2016, 13:49 | |
|
В том то и дело что будет, это основной минус.
Наткнулся на интересное видео: Конкурентность в Питоне с нуля.
Вживую. Доклад с PyCon US 2015 — ежегодной конференции python-разработчиков. Докладчик: Дэвид Бизли
0
|
|
|
295 / 108 / 57
Регистрация: 07.12.2016
Сообщений: 209
|
|
| 09.12.2016, 15:01 [ТС] | |
|
Господа, я тут прерву немного вашу дискуссию))) Задам пару нубских вопросов) Вообщем немного начинаю разбираться с коннектами и эмитами) по крайней мере получилось вывести информацию о кол-ве данных выбираемого файла в GUI. Теперь такой вопрос: у меня несколько лейблов на ГУИ висят. практически все будут обновляться в процессе работы парсера, выводя промежуточную информацию(сколько осталось, сколько проверено, сколько подошло, сколько прокси забраковалось и т.п). Мне для каждого лейбла нужно присваивать свой pyqtSignal? Или есть какой то более правильный способ?
0
|
|
|
|
|
| 09.12.2016, 15:13 | |
|
Все зависит от того что из перечисленного вы используете.
Если только QN...A...Manager то можно просто через setText() Если же потоки то необходима синхронизация, а ее можно достичь через сигнал/слот.
0
|
|
|
295 / 108 / 57
Регистрация: 07.12.2016
Сообщений: 209
|
|
| 09.12.2016, 16:33 [ТС] | |
|
0
|
|
|
|
||||||||||||
| 10.12.2016, 12:17 | ||||||||||||
1
|
||||||||||||
|
295 / 108 / 57
Регистрация: 07.12.2016
Сообщений: 209
|
|
| 11.12.2016, 15:36 [ТС] | |
|
Avazart, спасибо за подсказку. Так, теперь следующий момент всплыл)) По поводу зависания/отображения главного окна) Вроде бы получилось сделать, заработало. Использовал пример alex925(в начале темы выкладывал - через декоратор-отдельный поток). У меня главное окно запускает кнопкой старт функцию main(находящуюся уже в другом классе(QObject)). А там уже происходят всякие действия. Так вот, когда main отработает, в конце она выводит Qmessagebox стандартную с текстом, что все выполнилось и одна кнопка ОК. При нажатии на ОК, закрывается Qmessagebox(Qmessagebox.exec()), главное окно продолжает отображаться. Когда в линуксе запускал - то все было нормально. Запустив на Win_7, при нажатии ОК, винда говорит что возникли неполадки и предлагает отослать отчет. Наверняка я туплю, но вот где, пока еще не понимаю((
Добавлено через 5 часов 18 минут Всё, со своим же вопросом последним разобрался). Пришлось через сигнал передавать в главное окно, что функция своё отработала. И в главном окне уже вызывать QMessageBox. Тогда в win7 никаких ошибок не вылетает. Странно, что на линуксе все нормально было без этого Добавлено через 21 час 47 минут Появился ещё один вопрос). Программа работает, ГУИ не зависает. Но решил попробовать добавить кнопку СТОП. Задумка в том, чтобы при нажатии прерывалась работа потоков. Оставшиеся данные из очереди queue записывались в файл. Возможно ли вообще такое сделать? А то про потоки(threading) кто чего пишет - что их невозможно вообще остановить
0
|
|
|
|
|||||||||||
| 11.12.2016, 15:50 | |||||||||||
|
Можно попробовать останавливать по флагу.
Добавлено через 2 минуты
Кстати GIL гарантирует атомарность переменных boolean?
1
|
|||||||||||
|
295 / 108 / 57
Регистрация: 07.12.2016
Сообщений: 209
|
|
| 11.12.2016, 20:00 [ТС] | |
|
Чего то не получается. Или я не правильно делаю, или одно из двух) Уже даже попробовал вынести в отдельную функцию - что при нажатии СТОП - очищается очередь queue с Email. И все равно Гуи продолжает работать, обновляя промежуточные значения. Значит получается и потоки работают(
Добавлено через 3 часа 5 минут Всё, разобрался. Сам тупанул. забыл в конце task_done добавить для очереди, чтобы join() словил пустую queue
0
|
|
| 11.12.2016, 20:00 | |
|
Помогаю со студенческими работами здесь
39
Где и как правильно перерисовывать дочерние окна при изменении главного окна ? Запуск второго окна перед стартом главного окна Позиционирование дочернего окна относительно элемента главного окна Переход из окна главного меню на другие окна приложения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|