Форум сайта python.su
Есть небольшой код для проверки списка прокси, сокс5 серверов на валидность. Для упрощения,просто скачивается страница с сервера.
Нечто подобное:
def Get_Page(page, headers={}, proxy=""): #Настраиваем прокси old_socket = socket.socket if proxy: socks5, port = string.split(proxy, ":") socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, socks5, int(port)) socket.socket = socks.socksocket #Формируем запрос и отправляем его urllib2.socket.setdefaulttimeout(10) req = urllib2.Request(page) for key, value in headers.items(): req.add_header(key, value) try: F = urllib2.urlopen(req) except: socket.socket = old_socket return "" #Считываем результат result = "%s"%F.headers for line in F: result += line socket.socket = old_socket return result def Check_Proxy(proxy, page="http://ya.ru"): headers = {'Referer' : 'ya.ru', 'User-Agent': agent_list[random.randint(0,len(agent_list)-1)], 'Accept-Language' : 'en-us,en;q=0.5', 'Accept' : 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 'Accept-Charset' : 'utf-8;q=0.7,*;q=0.7' } respone = Get_Page(page, headers=headers, proxy=proxy) if(len(respone) > 5): good_proxy.append(proxy) return 1 return 0
i = 0 thread_count = 3 thread_list = [] while i < len(proxy_list): if( (threading.activeCount() < thread_count) and (i < len(proxy_list)) ): thread_list.append(threading.Thread(target=Check_Proxy, args=[proxy_list[i]])) thread_list[i].start() time.sleep(1) i += 1
Отредактировано (Ноя. 15, 2007 15:33:17)
Офлайн
В приниципе можно вставить любой sleep(0.1).
Но если по умному - надо делать синхронизацию между потоками.
Для этого есть специальные объекты.
Смысл в том, что запускающий цикл будет в спячке - пока не произойдет завершение нити.
Почитать об этом можно здесь http://www.intuit.ru/department/pl/python/11/python_11.html
Еще более правильное с точки зрения архитектуры - это сделать специальный пул коннектов. Но это уже следующий уровень экспиренса. =)
Отредактировано (Ноя. 15, 2007 16:36:16)
Офлайн
i = 0 thread_list = [] while i < len(proxy_list): if( (threading.activeCount() < thread_count) and (i < len(proxy_list)) ): thread_list.append(threading.Thread(target=Check_Proxy, args=[proxy_list[i]])) thread_list[i].start() i += 1 else: time.sleep(1)
Отредактировано (Ноя. 16, 2007 07:35:51)
Офлайн