Найти - Пользователи
Полная версия: Вопрос про многопоточность
Начало » Python для новичков » Вопрос про многопоточность
1
ajib6ept
Использую следующую структуру для отправки 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()

Вопрос возник, есть база в которой хранятся URL'ы, много - 1000/10000/100000
Как мне лучше организовать многопоточный чек по ним, т.е. закинуть в список urls ?
JOHN_16
А чем вас текущая схем не устраивает? как бы в общем то вполне себе хороший метод использовать очередии потоки.
o7412369815963
ajib6ept
есть база в которой хранятся URL'ы, много - 1000/10000/100000
Я бы при большом кол-ве ссылок, работал бы с базой, там бы и помечал скачено/не скачено/ошибка.
+ Можно запустить несколько процессов параллельно / на разных машинах
+ Когда скрипт выпадет / или нужно будет остановить что-б его подправить, для продолжения нужно будет просто запустить скрипт.
ajib6ept
А чем вас текущая схем не устраивает? как бы в общем то вполне себе хороший метод использовать очередии потоки.

Я еще не пробовал, но если я так сгенерю список на 100 000 элементов не будет проблем в памятью у меня (4GB) или на сервере (0,5GB) при запуске скрипта?

con = sqlite3.connect(configFileDB)
cur = con.cursor()
urls = [u[0] for u in cur.execute('SELECT url FROM ' + configTablename)]

+ Можно запустить несколько процессов параллельно / на разных машинах

Это надо смотреть в сторону celery?
o7412369815963
ajib6ept
но если я так сгенерю список на 100 000 элементов
Зачем? Черпайте по одному.
Можете сгенерировать и посмотреть сколько памяти заняло, навскидку 10-30Мб

ajib6ept
Это надо смотреть в сторону celery?
Необязательно, просто черпать ссылки из сетевой БД (MongoDB, Mysql, …)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB