Форум сайта python.su
26
Использую следующую структуру для отправки GET-запросов
class MyClass(threading.Thread): def __init__(self,queue): threading.Thread.__init__(self) self.queue = queue def run(self): while True: try: item = self.queue.get_nowait() except Queue.Empty: break try: self.worker(item) except Exception, detail: traceback.print_exc() self.queue.task_done() def worker(self, host): g = Grab() g.go(host) def main(): q = Queue.Queue() urls = ['http://ya.ru', 'http://yandex.ru', 'http://ramber.ru', 'http://nigma.ru'] th = 3 for url in urls: q.put(url) for i in xrange(th): t = MyClass(q) t.start() q.join() print "Finish" if __name__ == '__main__': logging.basicConfig(level=logging.DEBUG) main()
Офлайн
221
А чем вас текущая схем не устраивает? как бы в общем то вполне себе хороший метод использовать очередии потоки.
Офлайн
32
ajib6eptЯ бы при большом кол-ве ссылок, работал бы с базой, там бы и помечал скачено/не скачено/ошибка.
есть база в которой хранятся URL'ы, много - 1000/10000/100000
Офлайн
26
А чем вас текущая схем не устраивает? как бы в общем то вполне себе хороший метод использовать очередии потоки.
con = sqlite3.connect(configFileDB) cur = con.cursor() urls = [u[0] for u in cur.execute('SELECT url FROM ' + configTablename)]
+ Можно запустить несколько процессов параллельно / на разных машинах
Отредактировано ajib6ept (Янв. 5, 2014 18:09:39)
Офлайн
32
ajib6eptЗачем? Черпайте по одному.
но если я так сгенерю список на 100 000 элементов
ajib6eptНеобязательно, просто черпать ссылки из сетевой БД (MongoDB, Mysql, …)
Это надо смотреть в сторону celery?
Офлайн