ለእያንዳንዱ የPython ThreadPoolExecutor ስራ URL እና ፕሮክሲ ይመድቡ
የPython ጥያቄ ስራ ከመመዝገብዎ በፊት ፕሮክሲ ይመድቡ፣ ሰራተኞች በተጋራ ተለዋዋጭ ምርጫ ሁኔታ ላይ እንዲወዳደሩ ከመተው ይልቅ።
የገንዳው map በአንድ ጊዜ አንድ ንጥል ለሰራተኛው ያስተላልፋል። ያንን ንጥል ሙሉ ስራ ያድርጉት፣ URL እና የተመረጠውን ፕሮክሲ ጨምሮ፣ ሰራተኛው መንገዱን ከሚቀያየር ዓለም አቀፍ ዝርዝር እንዳይገምት።
ለተወሰነ urls፣ የተረጋገጡ የፕሮክሲ URLዎች ባዶ ያልሆነ ዝርዝር ያቅርቡ። የህዝብ HTTP እጩዎች በየHTTP ፕሮክሲ ዝርዝር ይገኛሉ፦
from concurrent.futures import ThreadPoolExecutor
from itertools import cycle
import requests
def fetch(job):
url, proxy_url = job
proxies = {"http": proxy_url, "https": proxy_url}
with requests.get(url, proxies=proxies, timeout=(5, 15)) as response:
response.raise_for_status()
return url, response.text
if not proxy_urls:
raise ValueError("No proxy endpoints were supplied")
jobs = zip(urls, cycle(proxy_urls))
with ThreadPoolExecutor(max_workers=5) as executor:
for url, body in executor.map(fetch, jobs):
handle_result(url, body)urls፣ proxy_urls እና handle_result በመተግበሪያው ይቀርባሉ። አስተባባሪው የመጨረሻ ነጥቦችን በተደጋጋሚ ቅደም ተከተል ይመድባል፤ እያንዳንዱ ሰራተኛ አንድ ቋሚ ጥንድ ይቀበላል። ውጤቶቹን መድገም የሰራተኛ ስህተቶችንም ያሳያል።
አምስት ሰራተኞች ንቁ ስራዎችን ይገድባሉ፣ በአንድ ፕሮክሲ ንቁ ስራዎችን አይደለም። ዝርዝሩ ሁለት ጫፎች ካሉት፣ ብዙ ስራዎች በአንድ ጊዜ ተመሳሳይ ጫፍ ሊጠቀሙ ይችላሉ። አስፈላጊ ሆኖ ሲገኝ ለእያንዳንዱ ጫፍ የተለየ የአቅም ደንብ ይጨምሩ። በአንድ የጫፍ URL አንድ ንቁ ስራ ለማግኘት፣ የተመሳሰለ ወረፋ ኪራይ እያንዳንዱን ግቤት መያዝ እና መመለስ ይችላል።
ድጋሚ ሙከራ ለተመሳሳይ URL አዲስ የተወሰነ ሙከራ መፍጠር አለበት። ከተጋራ ዝርዝር ግቤቶችን የሚያስወግዱ ተደጋጋሚ የድጋሚ ሙከራ ጥሪዎችን ያስወግዱ፦ ሌላ ሰራተኛ ከዚያ ላይ እየመረጠ ሊሆን ይችላል፣ እና የደከመ ዝርዝር አሁንም ግልጽ ውጤት ይፈልጋል።