pool ၏ map သည် အလုပ်သမားထံ တစ်ကြိမ်လျှင် item တစ်ခု ပေးပို့သည်။ ထို item ကို URL နှင့် ရွေးချယ်ထားသော proxy အပါအဝင် အလုပ်အပြည့်အစုံဖြစ်အောင် ပြုလုပ်ပါ၊ အလုပ်သမားသည် ပြောင်းလဲနေသော ကမ္ဘာလုံးဆိုင်ရာစာရင်းမှ ၎င်း၏လမ်းကြောင်းကို မခန့်မှန်းနိုင်ရန်။

ကန့်သတ်ထားသော urls များအတွက် အတည်ပြုပြီးသော proxy URL များ၏ ဗလာမဟုတ်သောစာရင်းကို ပေးပါ။ အများသူငှာ HTTP ကိုယ်စားလှယ်လောင်းများကို HTTP proxy စာရင်း တွင် ရနိုင်သည်-

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 ကို အပလီကေးရှင်းက ပေးသည်။ ညှိနှိုင်းသူသည် အဆုံးမှတ်များကို ထပ်တလဲလဲအစီအစဉ်ဖြင့် သတ်မှတ်သည်၊ အလုပ်သမားတစ်ဦးစီသည် ပုံသေအတွဲတစ်တွဲ ရရှိသည်။ ရလဒ်များကို ထပ်ခါတလဲလဲလုပ်ခြင်းက အလုပ်သမားများ၏ ခြွင်းချက်များကိုလည်း ဖော်ထုတ်ပေးသည်။

အလုပ်သမားငါးဦးသည် တက်ကြွသောအလုပ်များကို ကန့်သတ်သည်၊ proxy တစ်ခုစီအတွက် တက်ကြွသောအလုပ်များကို မဟုတ်ပါ။ စာရင်းတွင် အဆုံးမှတ်နှစ်ခုရှိပါက အလုပ်များစွာသည် တူညီသောအဆုံးမှတ်ကို တစ်ချိန်တည်း အသုံးပြုနိုင်သည်။ လိုအပ်ပါက အဆုံးမှတ်တစ်ခုစီအတွက် သီးခြားစွမ်းရည်စည်းမျဉ်း ထည့်ပါ။ အဆုံးမှတ် URL တစ်ခုစီအတွက် တက်ကြွသောအလုပ်တစ်ခုအတွက် ထပ်တူပြုထားသော တန်းစီငှားရမ်းမှု သည် ထည့်သွင်းမှုတစ်ခုစီကို ကြိုတင်မှာယူပြီး ပြန်ပေးနိုင်သည်။

ထပ်မံကြိုးစားမှုသည် တူညီသော URL အတွက် ကန့်သတ်ထားသော ကြိုးစားမှုအသစ်ကို ဖန်တီးသင့်သည်။ မျှဝေထားသောစာရင်းမှ ထည့်သွင်းမှုများကို ဖယ်ရှားသော ထပ်ခါတလဲလဲ ထပ်မံကြိုးစားမှုခေါ်ဆိုမှုများကို ရှောင်ကြဉ်ပါ- အခြားအလုပ်သမားတစ်ဦး ထိုမှ ရွေးချယ်နေနိုင်ပြီး ကုန်ဆုံးသွားသောစာရင်းသည် ရှင်းလင်းသောရလဒ် လိုအပ်နေဆဲဖြစ်သည်။

ဆက်စပ်ဆောင်းပါးများ