Форум сайта python.su
Добрый день.
Есть следующий код:
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()
Отредактировано looser14 (Июнь 21, 2012 15:08:31)
Офлайн
Обычно задачи производитель-потребитель реализуются с помощью очереди. У вас есть поток-производитель, который читает из файла и складывает строки в очередь. И есть потоки-потребители, которые вычитывают сообщения из очереди и складывают куда-то результат.
Офлайн
Зависит от количества заданий, если они вмещаются в оперативную память, можно в начале поместить их все в Queue, затем запустить несколько тредов, которые будут брать задания из Queue. Если заданий слишком много или они возникают во время работы, то нужен допонительный поток, который будет помещать эти задания в Qeueue, также надо будет определиться о том, как рабочие потоки узнают, что заданий больше нет (например Queue может быть пуста, но поток производитель заданий добавит в ней задания через некоторое время).
Можно попробовать использовать multiprocessing вместо thrading - это повысит произвиодительность.
Вот пример класса, который облегчает использование пула потоков т.е. он позволяет выполнить N задач используя M тредов: https://bitbucket.org/lorien/grab/src/04707b1274e7/grab/tools/work.py
А вот его реализация на базе multiprocessing (но я её толком не тестировал): https://bitbucket.org/lorien/grab/src/04707b1274e7/grab/tools/pwork.py
Также можно вообще поглядеть в сторону асинхронного подхода. Есть удобные фреймворки для организации асинхронных парсеров: Grab:Spider и Scrapy
Офлайн
Вот тут мы нечто подобное обсуждали: http://python.su/forum/topic/9423/
Там и код есть, если дочитаете до него :)
Офлайн