我嘗試組織最多10個併發下載的池。該函數應該下載基地網址,然後解析器此頁面上的所有網址,並下載他們每個人,但併發下載的總數應不超過10具有嵌套web請求的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種類型的網址,每個網址都需要不同的功能才能使用它。 – DominiCane 2013-03-10 14:27:25
如果你需要不同的處理器(消費者)爲urls,然後根據你應該產生一個特定的功能url的類型包裝在生產者的邏輯。但他們都有一個隊列。 – 2013-03-10 14:57:06