Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 21, 2013 23:32:44

nowayout
Зарегистрирован: 2013-06-21
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

multiprocessing + pygtk + urllib2 opener

Задача – создать многопроцессный data miner, который будет собирать различную инф-у из веба и все это писать в бд. Где можно посмотреть исходники прикладных программ, где используются multiprocessing + urllib2, или pygtk + urllib2 opener, или multiprocessing + pygtk ? Хочется посмотреть на грамотное использование Lock, запись в бд с нескольких процессов, получение доступа к данным (переменным, массивам, etc) для чтения этих данных с разных процессов и т.д.

Отредактировано nowayout (Июнь 21, 2013 23:39:12)

Офлайн

#2 Июнь 22, 2013 07:20:17

juche-songun
Зарегистрирован: 2012-10-26
Сообщения: 42
Репутация: +  -2  -
Профиль   Отправить e-mail  

multiprocessing + pygtk + urllib2 opener

nowayout
Задача – создать многопроцессный data miner, который будет собирать различную инф-у из веба и все это писать в бд. Где можно посмотреть исходники прикладных программ, где используются multiprocessing + urllib2, или pygtk + urllib2 opener, или multiprocessing + pygtk ? Хочется посмотреть на грамотное использование Lock, запись в бд с нескольких процессов, получение доступа к данным (переменным, массивам, etc) для чтения этих данных с разных процессов и т.д.

Советую отказаться от urllib, лучше выбери grab.

Офлайн

#3 Июнь 22, 2013 08:39:46

nowayout
Зарегистрирован: 2013-06-21
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

multiprocessing + pygtk + urllib2 opener

juche-songun
Почему ?

Офлайн

#4 Июнь 22, 2013 09:54:37

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

multiprocessing + pygtk + urllib2 opener

> Задача – создать многопроцессный 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/) эта штука позволяет более просто управлять пулом-процессов и запускать там различные задания.

Офлайн

#5 Июнь 22, 2013 10:52:13

nowayout
Зарегистрирован: 2013-06-21
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

multiprocessing + pygtk + urllib2 opener

lorien, спасибо, посмотрю. Я уже написал отчасти то, что нужно и оно работает как надо.
Хотелось бы еще узнать насчет записи в бд. Если я буду использовать mongodb, то как правильно с нескольких процессов писать в одну базу ? Для записи в обычный текстовый файл я сделал так:

...
        lock.acquire()
        f = open("asd", "a")
        f.write(s)
        f.close()
        lock.release()
...
И да, еще хотел бы посмотреть на примеры реализации multiprocessing в каких-то схожих задачах, желательно не уровня helloworld, а посложнее, имеющих практическое применение.

Отредактировано nowayout (Июнь 22, 2013 10:55:31)

Офлайн

#6 Июнь 22, 2013 11:11:07

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

multiprocessing + pygtk + urllib2 opener

База данных сама берет на себя проблему синхронизации. Просто пишите в нее, а она внутри разрулит.



Офлайн

#7 Июнь 22, 2013 15:30:31

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

multiprocessing + pygtk + urllib2 opener

lorien
есть смысл также глянуть на celery
присматривал для аналогичной задачи что-нибудь подобное и нашел mpi4py. Может кто-нибудь рассказать о преимуществах и недостатках каждого?
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)

Офлайн

#8 Июнь 22, 2013 15:45:03

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

multiprocessing + pygtk + urllib2 opener

Shaman, это лок на локальной переменной. Так не будет работать.



Офлайн

#9 Июнь 22, 2013 15:54:44

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

multiprocessing + pygtk + urllib2 opener

подправил. с multiprocessing дел не имел.

Офлайн

#10 Июнь 22, 2013 18:10:51

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

multiprocessing + pygtk + urllib2 opener

Soteric
Shaman, это лок на локальной переменной. Так не будет работать.
Я тут немножко поразмышлял… Это точно имеет значение?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version