Я занимаюсь разработкой польского веб-сайта для мониторинга блогосферы и ищу «лучшую практику» по обработке массовой загрузки контента на python.
Вот пример схемы рабочего процесса:
![http://img577.imageshack.us/img577/2971/scheme.png](https://i.stack.imgur.com/sL40a.png)
Описание:
Я классифицировал базу данных RSS-каналов (около 1000).Каждый час или около того я должен проверять фиды, если есть какие-то новые сообщения.Если это так, я должен анализировать каждый новый элемент.Процесс анализа обрабатывает метаданные каждого документа, а также загружает каждое изображение, найденное внутри.
Упрощенная однопотоковая версия кода:
for url, etag, l_mod in rss_urls:
rss_feed = process_rss(url, etag, l_mod) # Read url with last etag, l_mod values
if not rss:
continue
for new_item in rss_feed: # Iterate via *new* items in feed
element = fetch_content(new_item) # Direct https request, download HTML source
if not element:
continue
images = extract_images(element)
goodImages = []
for img in images:
if img_qualify(img): # Download and analyze image if it could be used as a thumbnail
goodImages.append(img)
Поэтому я выполняю итерацию по каналам RSS, загружая только каналыс новыми предметами.Загрузите каждый новый элемент из канала.Загрузите и проанализируйте каждое изображение в элементе.
HTTR-запросы появляются на следующих этапах: - загрузка xss-документа rss - загрузка x элементов, найденных в rss - загрузка всех изображений каждого элемента
решил попробовать библиотеку python gevent (www.gevent.org) для обработки загрузки содержимого с несколькими URL-адресами
Что я хочу получить в результате: - Возможность ограничить количество внешних http-запросов - Возможность parralel загрузки всех перечисленныхэлементы содержимого.
Каков наилучший способ сделать это?
Я не уверен, потому что я новичок в parralel программировании (ну, этот асинхронный запрос, вероятно, не имеет ничего общегоя вообще не знаю, как такие задачи решаются в зрелом мире.
Единственная идея, которая мне приходит в голову, - это использовать следующую технику: - запускать скрипт обработки через cronjob каждые45 минут - попытайтесь заблокировать файл с письменным процессом pid в самом начале.Если блокировка не удалась, проверьте список процессов для этого pid.Если pid не найден, возможно, в какой-то момент процесс завершился неудачно, и новый sart безопасен.- С помощью оболочки для запуска пула gevent для загрузки RSS-каналов на каждом этапе (новые элементы обнаруживаются) добавляются новые задания в quique для загрузки элементов, при каждом загружаемом элементе добавляются задачи для загрузки изображений.- Каждые несколько секунд проверяйте текущее состояние заданий, запускайте новое задание из quique, если в режиме FIFO есть свободные слоты.
Звук для меня нормальный, но, возможно, у такого рода заданий есть "наилучшая практика", и яЯ изобретаю колесо сейчас.Вот почему я публикую свой вопрос здесь.
Спасибо!