Har en webscraper gjord på requests som håller på tugga genom någon miljon länkar.
Har två proxys jag byter mellan för olika syften, Stormproxies och Webshare.
På webshare verkar jag kunna köra 20 trådar på 100 roterande IP-adresser utan att bli bannad, och på Stormproxies finns det 700K adresser till hands, men jag har bara 10 trådar tillgängliga på abonnemanget.
Jag funderar på om det skulle gå att maximera användningen av de där 10 trådarna lite grann.
Jag försökte med något i stil med detta:
Tänkte mig något att om jag kör något i stil med 50 trådar eller fler, så kunde semaphore kanske begränsa dessa till att endast 10 åt gången har en öppen anslutning med requests, men så fort anslutningen är färdig så blir en slot ledig för en annan tråd att ta över.
Saknas förstås många bitar i ovanstående kod, men det bör visa översiktligt hur jag menar.
Syftet är lite att maximera bruket av 10 konkurrenta uppkopplingar, medans själva arbetet på scrapad data sker utanför begränsningen av antalet uppkopplingar, som man kan se på kommentaren i workerfunktionen.
Problemet är att när jag kör detta och kollar min internetanslutning så ser det konstigt ut.
Testade med 100 trådar och 10 semaphore bara för att, och det som hände var att absolut ingenting hände på typ 10 sekunder, sedan PANG så kom en topp på 20Mb/s användning i en halv sekund, och sedan ingenting i 10 sekunder igen, och sedan en topp, o.s.v.
Alltså blev det precis tvärtom till vad jag hade hoppats på, d.v.s. att det skulle bli en jämnare ström av konstanta uppkopplingar som löste av varandra.
Har två proxys jag byter mellan för olika syften, Stormproxies och Webshare.
På webshare verkar jag kunna köra 20 trådar på 100 roterande IP-adresser utan att bli bannad, och på Stormproxies finns det 700K adresser till hands, men jag har bara 10 trådar tillgängliga på abonnemanget.
Jag funderar på om det skulle gå att maximera användningen av de där 10 trådarna lite grann.
Jag försökte med något i stil med detta:
Kod:
max_concurrent_threads = 10 semaphore = threading.Semaphore(max_concurrent_threads) # Define a function that uses the semaphore to control access to a shared resource def worker(): with semaphore: response = requests.get(url, proxies=proxies) # Ytterligare arbete som görs med scrapad data här, utanför semaphore row_queue = Queue() # Lång kö av länkar som ska köras for row in rows: row_queue.put(row) num_threads = 50 # Create worker threads and start them threads = [] for _ in range(num_threads): t = threading.Thread(target=worker, args=(row_queue, lock, database_file, len(rows))) t.start() threads.append(t) for t in threads: t.join()
Tänkte mig något att om jag kör något i stil med 50 trådar eller fler, så kunde semaphore kanske begränsa dessa till att endast 10 åt gången har en öppen anslutning med requests, men så fort anslutningen är färdig så blir en slot ledig för en annan tråd att ta över.
Saknas förstås många bitar i ovanstående kod, men det bör visa översiktligt hur jag menar.
Syftet är lite att maximera bruket av 10 konkurrenta uppkopplingar, medans själva arbetet på scrapad data sker utanför begränsningen av antalet uppkopplingar, som man kan se på kommentaren i workerfunktionen.
Problemet är att när jag kör detta och kollar min internetanslutning så ser det konstigt ut.
Testade med 100 trådar och 10 semaphore bara för att, och det som hände var att absolut ingenting hände på typ 10 sekunder, sedan PANG så kom en topp på 20Mb/s användning i en halv sekund, och sedan ingenting i 10 sekunder igen, och sedan en topp, o.s.v.
Alltså blev det precis tvärtom till vad jag hade hoppats på, d.v.s. att det skulle bli en jämnare ström av konstanta uppkopplingar som löste av varandra.
__________________
Senast redigerad av Kottkompott 2023-04-07 kl. 17:37.
Senast redigerad av Kottkompott 2023-04-07 kl. 17:37.