ورکر پول بنانا کال کرنے والے کو ڈاؤن لوڈ شدہ صفحات نہیں دیتا۔ جمع کرائے گئے کام سے واپس آنے والی قدروں کو رکھیں اور استعمال کریں:

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 درخواستوں کے لیے کنکشن پولنگ کا مالک ہے۔ یہاں استعمال ہونے والے ڈیفالٹ پری لوڈڈ جوابی موڈ کے ساتھ، urllib3 باڈی پڑھتا ہے اور کنکشن اپنے پول میں واپس کرتا ہے۔ اسٹریمنگ ورژن کو واضح استعمال اور کنکشن کی رہائی درکار ہوگی۔

maxsize عام طور پر محفوظ شدہ دوبارہ استعمال کے قابل کنکشنز کو کنٹرول کرتا ہے، نہ کہ ہر کھلے ساکٹ پر سخت حد۔ block=True متعلقہ پول رویہ بدلتا ہے تاکہ کال کرنے والے اس پول کی حد سے زیادہ اضافی کھولنے کے بجائے خالی کنکشن کا انتظار کریں۔

اس مثال میں ورکر تعداد متوازی کالز کو محدود کرتی ہے۔ بہت سے منزلوں کے ساتھ، پول ترتیب اور HTTPS سرنگوں کے لیے استعمال ہونے والا راستہ بھی اہم ہے؛ ایک پول کی ترتیب کو ہر میزبان کے لیے ایک عالمی ساکٹ کوٹہ کے طور پر بیان نہیں کرنا چاہیے۔

متعلقہ مضامین