Я пытаюсь организовать пул с максимальными 10 одновременными загрузками. Функция должна загрузить базовый URL, то парсер всех URLs на этой странице и загрузить каждый из них, но общее количество одновременных загрузок не должно превышать 10.Пул Gevent с вложенными веб-запросами
from lxml import etree
import gevent
from gevent import monkey, pool
import requests
monkey.patch_all()
urls = [
'http://www.google.com',
'http://www.yandex.ru',
'http://www.python.org',
'http://stackoverflow.com',
# ... another 100 urls
]
LINKS_ON_PAGE=[]
POOL = pool.Pool(10)
def parse_urls(page):
html = etree.HTML(page)
if html:
links = [link for link in html.xpath("//a/@href") if 'http' in link]
# Download each url that appears in the main URL
for link in links:
data = requests.get(link)
LINKS_ON_PAGE.append('%s: %s bytes: %r' % (link, len(data.content), data.status_code))
def get_base_urls(url):
# Download the main URL
data = requests.get(url)
parse_urls(data.content)
Как я могу организовать его идти параллельный путем, но сохранить общий глобальный лимит пула для ВСЕХ веб-запросов?
Проблема в том, что у меня есть 2 типа URL-адресов, и для каждого из них требуется другая функция для работы с ним. – DominiCane
Если вам нужны разные процессоры (потребители) для URL-адресов, то заверните логику в производителе, в зависимости от типа URL-адреса вы должны создать определенную функцию. Но у всех есть одна очередь. –