![]() |
|
|
![]()
|
|
| Lindemann66 |
|
||||
|
Thinking... ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 2.8.2011 Где: Ульяновск Репутация: нет Всего: нет |
Всем привет!
Представьте Программа, выполняющая сканирование сайтов на предмет обновлений Допустим, в БД 50 сайтов = 50 сканирующих "потоков"... В каждом "потоке" - скачка html-кода из интернета, парсинг, внесение в БД... Я специально закавычил слово "поток", потому что, в данном случае, использование потоков не обязательно... Важно другое Как организовать такую работу наиболее правильным "архитектурно-технологически" способом? Мне просто интересны варианты Уже пробовал создавать отдельный поток под каждый сайт, но проблема в том, что сканирование сайтов (читай - использование QWebPage) необходимо делать в главном (GUI) потоке К тому же, этот механизм не показал особой стабильности... Может, из-за корявости реализации, не использования QthreadPool'ов (ксттаи, интересно, насколько хорош QThreadPool)) Сейчас делаю так...(просто пример, но суть работы та же, что и в программе) Analyzer
Timer
То есть, есть класс анализатора, в котором создаются потоки, и каждый из них вызывает через определённое время сигнал о том, что необходимо произвести анализ То есть, всё построено на механизме сигналов-слотов Но, при "большом" объёме сайтов (примерно 20-30) - прога заваливается, и либо не сканирует какие-то сайты, либо не работает вообще И я не могу определить, в чём тут проблема! То есть, если брать 5 +-5 сайтов, то работа стабильна, а чуть больше - глючит Дело ли тут в том, что механизм сигналов-слотов даёт сбой, или где-то в алгоритме ошибка (но прога ведь не падает..)? Отсюда вопросы: 1. Насколько надёжно, на Ваш взгляд, использование механизма сигналов-слотов 2. Насколько оно надёжно в приведённом случае 3. Насколько рнационален, на Ваш взгляд, предложенный мной подход к решению проблемы 4. Ну и вообще, Ваше мнение на сей счёт Вопросов много накатал... Буду рад, если кто-нибудь ответит --------------------
stay true |
||||
|
|||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 2 Всего: 20 |
А для чего использовать QWebPage ?
Если использовать Qt, то ябы сделал так: По количеству сайтов создалбы объекты QHttp запросы от данного объекта выполняются асинхронно и не блокирует основной поток. Поэтому запускаем получение данных, когда данные приходят - QHttp вызывает соответствующие слоты. Далее вторая часть: Из слота можно создавать поток, передавать в него полученный Html текст, запускать поток на выполнение и забывать о нем (конечноже не забыв сделать чтобы он атоматически удалялся для этот смотрим deleteLater). Ну а в потоке делать уже парсинг и сохранение полученных данных в БД. -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |