တစ်ပြိုင်နက် urllib3 ပရောက်စီ တောင်းဆိုချက်များမှ ရလဒ်တစ်ခုချင်းစီ စုဆောင်းခြင်း
ပြင်ဆင်ထားသော ProxyManager ကို အလုပ်သမား thread များအကြား မျှဝေပါ၊ executor ၏ ရလဒ် ထပ်ခါတလဲလဲကိရိယာကို သုံးပါ၊ pool ထိန်းသိမ်းမှုနှင့် ချိတ်ဆက်မှု ကန့်သတ်ချက်ကို ခွဲခြားပါ။
အလုပ်သမား pool တစ်ခု ဖန်တီးခြင်းသည် ခေါ်ဆိုသူထံ ဒေါင်းလုဒ်ရယူထားသော စာမျက်နှာများကို မပေးပါ။ တင်သွင်းထားသော အလုပ်မှ ပြန်ပေးသော တန်ဖိုးများကို သိမ်းဆည်းပြီး အသုံးပြုပါ-
from concurrent.futures import ThreadPoolExecutor
import urllib3
manager = urllib3.ProxyManager(
'http://proxy.example:8080',
maxsize=4,
block=True,
)
def fetch(url):
response = manager.request(
'GET', url, timeout=urllib3.Timeout(connect=5, read=15),
)
return url, response.status, response.data
try:
with ThreadPoolExecutor(max_workers=4) as workers:
results = list(workers.map(fetch, urls))
finally:
manager.clear()ဤအပိုင်းသည် ကန့်သတ်ထားသော URL စာရင်းနှင့် သာမန် တုံ့ပြန်မှု အရွယ်အစားများကို ယူဆထားသည်။ ပရောက်စီ အတည်ပြုချက်မပါဘဲ ခွင့်ပြုထားသော အများသူငှာ URL စစ်ဆေးမှုများအတွက် HTTP ပရောက်စီ စာရင်းမှ ကိုယ်စားလှယ်တစ်ဦးသည် မန်နေဂျာ၏ နမူနာ HTTP အဆုံးမှတ်ကို အစားထိုးနိုင်သည်။ ရလဒ်တစ်ခုချင်းစီတွင် ၎င်း၏ URL ပါဝင်သောကြောင့် ခေါ်ဆိုသူသည် အခြေအနေနှင့် ကိုယ်ထည်ကို မှန်ကန်သော တောင်းဆိုချက်နှင့် ချိတ်ဆက်နိုင်သည်။ map သည် ရလဒ်များကို ထည့်သွင်းမှု အစီအစဉ်အတိုင်း ပြန်ပေးသည်။ အလုပ်သမားတစ်ဦးရှိ ခြွင်းချက်ကို ထိုရလဒ်ကို ရယူသောအခါ မြှင့်တင်သည်။
ပြင်ဆင်ထားသော ProxyManager သည် တောင်းဆိုချက်များအတွက် ချိတ်ဆက်မှု pool ကို ပိုင်ဆိုင်သည်။ ဤနေရာတွင် အသုံးပြုသော မူရင်း ကြိုတင်တင်ထားသော တုံ့ပြန်မှုမုဒ်ဖြင့် urllib3 သည် ကိုယ်ထည်ကို ဖတ်ပြီး ချိတ်ဆက်မှုကို ၎င်း၏ pool သို့ ပြန်ပေးသည်။ streaming ဗားရှင်းတွင် ရှင်းလင်းသော အသုံးပြုမှုနှင့် ချိတ်ဆက်မှု လွှတ်ပေးမှု လိုအပ်မည်။
maxsize သည် များသောအားဖြင့် သိမ်းဆည်းထားသော ပြန်လည်အသုံးပြုနိုင်သော ချိတ်ဆက်မှုများကို ထိန်းချုပ်သည်၊ ဖွင့်ထားသော socket တစ်ခုချင်းစီအတွက် တင်းကျပ်သော ကန့်သတ်ချက် မဟုတ်ပါ။ block=True သည် သက်ဆိုင်ရာ pool အမူအကျင့်ကို ပြောင်းလဲသောကြောင့် ခေါ်ဆိုသူများသည် ထို pool ၏ ကန့်သတ်ချက်ထက် ပိုမိုဖွင့်မည့်အစား လွတ်နေသော ချိတ်ဆက်မှုကို စောင့်ဆိုင်းသည်။
ဤဥပမာတွင် အလုပ်သမား အရေအတွက်သည် တစ်ပြိုင်နက် ခေါ်ဆိုမှုများကို ကန့်သတ်သည်။ ခရီးဆုံးနေရာ များစွာရှိလျှင် pool အပြင်အဆင်နှင့် HTTPS ဥမင်များအတွက် အသုံးပြုသော လမ်းကြောင်းသည်လည်း အရေးကြီးသည်။ pool တစ်ခုအတွက် ဆက်တင်ကို host တစ်ခုချင်းစီအတွက် တစ်ခုတည်းသော ကမ္ဘာ့ socket ခွဲတမ်းအဖြစ် ဖော်ပြသင့်သည်မဟုတ်ပါ။