Есть следующий код:
import urllib2 proxies = {'http':'200.206.14.26:3128'} proxySupport = urllib2.ProxyHandler(proxies) opener = urllib2.build_opener(proxySupport) opener.addheaders = [('User-Agent', 'Mozilla/5.0')] urllib2.install_opener(opener) count = 0 linecount = 0 with open("list.txt", "r") as f1: for line in f1.readlines(): linecount+=1 print line f = urllib2.urlopen(line) s = f.read() result = s.find('<h1 id="title"><b id="profile'\ '_online_lv" class="fl_r">Online') if result != -1: print 'yes' count += 1 f.close() sleep(50) with open("result.txt", "w") as f1: f1.write("Из %d человек %d онлайн" % (linecount, count))
import threading class VKThread(threading.Thread): def run(self): # код выше for x in xrange (20): VKThread().start()
В принципе, с помощью глобальных переменных внутри класса я могу сделать так, чтобы на каждый поток использовался отдельный прокси.
У меня вопрос, как узнать, свободен ли поток и в зависимости от этого использовать его, чтобы обработать следующую строку из файла?
Я бы сделал так:
Организовал бесконечный цикл. Объявил бы список threadFree, элементы которого были бы равны 0 или 1 (изначально все 0). Если поток начинает выполнение, то threadFree = 1, а когда код потока завершится, то присвоить 0. В бесконечном цикле выявляется, какой поток свободен и если есть какой-нибудь свободный, то создать новый. Так до тех пор, пока не закончатся строки в файле, точнее пока не будет обработана последняя строка. Но тут проблема, во-первых, в коде берётся какой-то номер строки. Если будет одновременное выполнение нескольких процессов, то возникнет путаница, ведь неясно, какую строку брать. Например, берётся первая строка в первом потоке. Значит, следующей будет 2 строка и мы увеличиваем значение спец. переменной на 1…. в общем, я даже объяснить не могу толком.
Дайте каких-нибудь советов, спасибо. Правильно ли я рассуждаю вообще?