2017-02-19 79 views
1

我想我對線程的工作原理有一個非常基本的理解,但是由於我不知道那麼多,我無法弄清楚這一點。我想擁有大約10個線程的池限制,但棘手的部分是我不知道如何逐行讀取它。循環中的python多線程

proxies = { 
    'http': 'http://123.10.210.213:9999', 
    'https': 'http://123.10.210.213:9999' 
} 


def create_proxy_lst(txt): 
    print(""" 
######################################## 
#  WORKING |  NOT WORKING # 
######################################## 
     """) 
    proxy_list = [] 
    with open(txt) as f: 
     for line in f: 
      proxy_list.append(line.strip('\n')) 
    return proxy_list 


def check_proxy(website="https://google.com/"): 
    working = 0 
    not_working = 0 
    total = 0 
    lst = create_proxy_lst("uncheckedproxys.txt") 
    for proxy in lst: 
     try: 
      proxies["https"] = "http://" + proxy 
      proxies["http"] = "http://" + proxy 
      r = requests.get(website, timeout=1, proxies=proxies) 
      if r.status_code == 200: 
       print("%s" % proxy) 
       working += 1 
       total += 1 
       os.system("title Working: " + str(working) + "\t  Not working " + str(not_working) + "  ✔" + " Total: " + str(total) + "/" + str(len(lst))) 
     except Exception: 
      print("\t\t %s" % proxy) 
      not_working += 1 
      total += 1 
      os.system("title Working: " + str(working) + "\t  Not working " + str(not_working) + "  ✖" + " Total: " + str(total) + "/" + str(len(lst))) 

回答

0

把你的代理爲Queue.Queue(),然後再啓動10個線程,從隊列中讀取代理。

你的情況:

from Queue import Queue 
from threading import Thread 

def worker(proxy_queue): 
    while not proxy_queue.empty(): 
     proxy = proxy_queue.get() 

     working = 0 
     not_working = 0 
     total = 0 

     try: 
      proxies["https"] = "http://" + proxy 
      proxies["http"] = "http://" + proxy 
      r = requests.get(website, timeout=1, proxies=proxies) 
      if r.status_code == 200: 
       print("%s" % proxy) 
       working += 1 
       total += 1 
       os.system("title Working: " + str(working) + "\t  Not working " + str(not_working) + "  ✔" + " Total: " + str(total) + "/" + str(len(lst))) 
     except Exception: 
      print("\t\t %s" % proxy) 
      not_working += 1 
      total += 1 
      os.system("title Working: " + str(working) + "\t  Not working " + str(not_working) + "  ✖" + " Total: " + str(total) + "/" + str(len(lst))) 

if __name__ == '__main__': 
    # Build a queue 
    proxy_queue = Queue() 

    # Put these proxies into the queue 
    with open("uncheckedproxys.txt") as f: 
     for line in f: 
      proxy_queue.put(line.strip()) 

    # Create thread pool 
    thread_pool = [Thread(target=worker, args=proxy_queue) for i in range(10)] 

    # Start threads 
    for thread in thread_pool: 
     thread.start() 
+0

看起來不錯,我可能會更多Google上的隊列。謝謝! –