queue ഉപയോഗിച്ച് Python ത്രെഡുകൾക്കിടയിൽ പ്രോക്സി പൂൾ പങ്കിടുക
സിൻക്രൊണൈസ്ഡ് queue ഉം finally ബ്ലോക്കും ഉപയോഗിച്ച് ഒരു സിൻക്രണസ് ത്രെഡഡ് പ്രവർത്തനത്തിനായി ഒരു പ്രോക്സി റിസർവ് ചെയ്ത് പിന്നീട് തിരികെ നൽകുക.
നിരവധി ത്രെഡുകൾ ഒരു ചെറിയ പ്രോക്സി പൂൾ പങ്കിടുമ്പോൾ, റാൻഡം എൻട്രി തിരഞ്ഞെടുക്കുന്നത് രണ്ട് സജീവ പ്രവർത്തനങ്ങൾക്ക് ഒരേ പ്രോക്സി നൽകിയേക്കാം. ഇപ്പോൾ കടമെടുക്കാൻ ലഭ്യമായ എൻട്രികൾ ഒരു queue സൂക്ഷിക്കാം:
from contextlib import contextmanager
from queue import Queue
available = Queue()
for endpoint in dict.fromkeys(proxy_urls):
available.put(endpoint)
@contextmanager
def borrow_proxy():
endpoint = available.get(timeout=5)
try:
yield endpoint
finally:
available.put(endpoint)
def process_url(url):
with borrow_proxy() as endpoint:
return fetch_one(url, endpoint)
വർക്കർ ത്രെഡുകൾ ആരംഭിക്കുന്നതിന് മുമ്പ് queue ഒരു തവണ നിർമ്മിക്കുക. proxy_urls-ൽ പൂർണ്ണ എൻഡ്പോയിന്റ് URL-കൾ ഉണ്ട്. പൊതു സ്ഥാനാർത്ഥികൾ സൗജന്യ പ്രോക്സി ലിസ്റ്റിൽ ലഭ്യമാണ്; fetch_one പിന്തുണയ്ക്കുന്ന പ്രോട്ടോക്കോളും URL ഫോർമാറ്റും ഉപയോഗിക്കുക. നിലവിലുള്ള സിൻക്രണസ് fetch_one ഫംഗ്ഷൻ തിരികെ വരുന്നതിന് മുമ്പ് അതിന്റെ നെറ്റ്വർക്ക് പ്രവർത്തനം പൂർത്തിയാക്കി ഏതെങ്കിലും പ്രതികരണം അടയ്ക്കണം. അല്ലെങ്കിൽ കണക്ഷൻ ഇപ്പോഴും ആ പ്രോക്സി ഉപയോഗിക്കുമ്പോൾ ലീസ് അവസാനിക്കും.
Queue.get ഒരു ലഭ്യമായ എൻട്രി ആറ്റോമിക് ആയി നീക്കം ചെയ്യുന്നു. തീർന്നുപോയ പൂൾ പങ്കിട്ട ഫ്ലാഗുകൾ വീണ്ടും വീണ്ടും സ്കാൻ ചെയ്യുന്നതിന് പകരം കാത്തിരിക്കുന്നു. അഞ്ച് സെക്കൻഡിനുള്ളിൽ എൻട്രി വന്നില്ലെങ്കിൽ queue.Empty വിളിക്കുന്നയാളിലെത്തും; ആ ഫലത്തിനായി ആപ്ലിക്കേഷന്റെ വീണ്ടും ശ്രമിക്കൽ, പരാജയം അല്ലെങ്കിൽ റദ്ദാക്കൽ നയം തിരഞ്ഞെടുക്കുക.
finally ബ്ലോക്ക് വിജയത്തിനോ ഒഴിവാക്കലിനോ ശേഷം ഏറ്റെടുത്ത എൻട്രി തിരികെ നൽകുന്നു. പരാജയപ്പെട്ട എൻഡ്പോയിന്റ് ആരോഗ്യകരമാണെന്ന് അത് പ്രഖ്യാപിക്കുന്നില്ല. ക്വാറന്റൈൻ, പകരം, കൂൾഡൗൺ നയങ്ങൾക്ക് വ്യക്തമായ പാത ആവശ്യമാണ്, താൽക്കാലിക പിശക് കാണുന്ന ഓരോ പ്രോക്സിയും നിശബ്ദമായി ഉപേക്ഷിക്കുന്നതിന് പകരം.
സമാന URL സ്ട്രിംഗുകൾ ഡുപ്ലിക്കേറ്റ് നീക്കം ചെയ്യുന്നത് queue-ൽ ഇരട്ടി എൻട്രികൾ തടയുന്നു. വ്യത്യസ്ത URL-കൾ ഇപ്പോഴും ഒരേ ഭൗതിക പ്രോക്സിയെയോ എക്സിറ്റിനെയോ സൂചിപ്പിക്കാം; ആ പങ്കിട്ട വിഭവത്തിൽ എക്സ്ക്ലൂസിവിറ്റി ബാധകമാകണമെങ്കിൽ അവ ബോധപൂർവം ഗ്രൂപ്പ് ചെയ്യുക. queue ഈ പ്രക്രിയയിലെ ത്രെഡുകളെ ഏകോപിപ്പിക്കുന്നു, മറ്റ് യന്ത്രങ്ങളിലെ വർക്കർമാരെയല്ല.