Форум сайта python.su
0
Задача – создать многопроцессный data miner, который будет собирать различную инф-у из веба и все это писать в бд. Где можно посмотреть исходники прикладных программ, где используются multiprocessing + urllib2, или pygtk + urllib2 opener, или multiprocessing + pygtk ? Хочется посмотреть на грамотное использование Lock, запись в бд с нескольких процессов, получение доступа к данным (переменным, массивам, etc) для чтения этих данных с разных процессов и т.д.
Отредактировано nowayout (Июнь 21, 2013 23:39:12)
Офлайн
-2
nowayout
Задача – создать многопроцессный data miner, который будет собирать различную инф-у из веба и все это писать в бд. Где можно посмотреть исходники прикладных программ, где используются multiprocessing + urllib2, или pygtk + urllib2 opener, или multiprocessing + pygtk ? Хочется посмотреть на грамотное использование Lock, запись в бд с нескольких процессов, получение доступа к данным (переменным, массивам, etc) для чтения этих данных с разных процессов и т.д.
Офлайн
0
juche-songunПочему ?
Офлайн
> Задача – создать многопроцессный data miner, который будет собирать различную инф-у из веба и все это писать в бд
Довольно специфичная задача, возможно, есть смысл воспользоваться готовыми фреймворками, можно посмотреть в сторону Grab::Spider (http://docs.grablib.org/#grab-spider-user-guide) или scrapy (http://doc.scrapy.org/en/0.16/) В этих фреймворках упор сделан на асинхронность т.е. скачивание информации идёт в одном процессе через асинхронные сокеты, далее эту информацию вы можете парсить в этом же процессе или раскидывать через multiprocessing на pool-процессов для парсинга инфы и прочих вещей. Я со scrapy плохо знаком, вроде бы он из коробки работает на нескольких процессах. Grab::Spider изначально разрабатывался для одного процесса, хотя с помощью одного костыля можно запустить сколько угодно процессов исопльзующих общую очередь задач (http://datalab.io/blog/post/17/zapuskaem-spider-na-neskolkih-processah/). Если вы всё же решили писать самописную реализацию скачивания-обработки страниц на базе множества процессов, то есть смысл также глянуть на celery (http://www.celeryproject.org/) эта штука позволяет более просто управлять пулом-процессов и запускать там различные задания.
Офлайн
0
lorien, спасибо, посмотрю. Я уже написал отчасти то, что нужно и оно работает как надо.
Хотелось бы еще узнать насчет записи в бд. Если я буду использовать mongodb, то как правильно с нескольких процессов писать в одну базу ? Для записи в обычный текстовый файл я сделал так:
... lock.acquire() f = open("asd", "a") f.write(s) f.close() lock.release() ...
Отредактировано nowayout (Июнь 22, 2013 10:55:31)
Офлайн
20
База данных сама берет на себя проблему синхронизации. Просто пишите в нее, а она внутри разрулит.
Офлайн
88
lorienприсматривал для аналогичной задачи что-нибудь подобное и нашел mpi4py. Может кто-нибудь рассказать о преимуществах и недостатках каждого?
есть смысл также глянуть на celery
nowayoutЛучше так:lock.acquire() f = open("asd", "a") f.write(s) f.close() lock.release()
with lock, open("asd", "a") as f: f.write(s)
Отредактировано Shaman (Июнь 22, 2013 15:59:39)
Офлайн
20
Shaman, это лок на локальной переменной. Так не будет работать.
Офлайн
88
подправил. с multiprocessing дел не имел.
Офлайн
88
SotericЯ тут немножко поразмышлял… Это точно имеет значение?
Shaman, это лок на локальной переменной. Так не будет работать.
Офлайн