Я пытаюсь использовать запросы для проверки огромных списков прокси. Для этого я использую потоки. Мне действительно нужны эти потоки, потому что я использую ту же структуру кода, что и для многих запросов на веб-сайте, где я делаю 1 thread = 1 IP.Запросы с прокси и потоком
Так что мой код сортировки:
def proxyList(proxies, nbThread):
with open('proxyList.txt', 'w') as f:
f.write('')
f.close()
proxies = list(set(proxies))
prox = []
lenS = len(proxies)
pas = int(lenS/nbThread)
subSeq = [proxies[i*pas:(i+1)*pas] for i in range(nbThread)]
subSeq[nbThread-1]+=proxies[nbThread*pas:]
threads = [0 for i in range(nbThread)]
for i in range(nbThread):
threads[i] = proxy(subSeq[i],)
for i in range(nbThread):
threads[i].start();
for i in range(nbThread):
threads[i].join();
return list(set(prox))
class proxy(Thread):
def __init__(self, proxies):
Thread.__init__(self)
self.proxies = proxies
def run(self):
k=0
prox = []
for proxy in self.proxies:
k+=1
try:
requests.get("https://api.ipify.org/?format=json", timeout=15, proxies={"https":str(re.findall(r'[0-9]+(?:\.[0-9]+){3}:[0-9]+', proxy)[0])})
try:
requests.get("https://api.ipify.org/?format=json", timeout=15, proxies={"https":str(re.findall(r'[0-9]+(?:\.[0-9]+){3}:[0-9]+', proxy)[0])})
prox+=[str(proxy)]
print("Bon proxy : " + str(re.findall(r'[0-9]+(?:\.[0-9]+){3}:[0-9]+', proxy)[0]))
with open('proxyList.txt', 'a') as f:
f.writelines(str(re.findall(r'[0-9]+(?:\.[0-9]+){3}:[0-9]+', proxy)[0])+'\n');
f.close()
except:
t = "a"
except:
print("Mauvais proxy : "+ str(re.findall(r'[0-9]+(?:\.[0-9]+){3}:[0-9]+', proxy)[0]))
print(sys.exc_info()[0])
print("Terminé: "+str(k), prox)
Это работает, но я не всегда имеют одинаковые выходные результаты, это сильно зависит от количества нитей, которые я поставил.
У вас, ребята, есть идея, я видел, что, возможно, запросы здесь не лучший выбор, но мне действительно нужны мои потоки с моими прокси.
Спасибо, Djokx
Спасибо за ваш ответ. Но когда я пытаюсь запустить proxyList дважды, с теми же параметрами, результаты довольно разные между ними. Ты знаешь почему ? Спасибо –
Btw, спасибо за улучшение кода! :) Но мне кажется, что если я делаю: для г в диапазоне (nbThread): нити [я] = прокси (после- [я]) нити [я] .start() нити [я ] .join() Ожидается, что первый поток будет остановлен, чтобы начать второй, нет? Я стараюсь, что это намного медленнее! –
Я думал, вам не нужно ждать, чтобы закончить каждый цикл. Поэтому я рекомендовал вставить start и join в один цикл. Вот почему вы должны ждать меньше, но существует ли многопоточность? Если это так, вы правы. Это займет большую задержку. В конечном счете вы можете уточнить, какие различия в результатах? – nuriselcuk