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

Советую отказаться от urllib, лучше выбери grab.
nowayout
juche-songun
Почему ?
lorien
> Задача – создать многопроцессный 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/) эта штука позволяет более просто управлять пулом-процессов и запускать там различные задания.
nowayout
lorien, спасибо, посмотрю. Я уже написал отчасти то, что нужно и оно работает как надо.
Хотелось бы еще узнать насчет записи в бд. Если я буду использовать mongodb, то как правильно с нескольких процессов писать в одну базу ? Для записи в обычный текстовый файл я сделал так:
...
        lock.acquire()
        f = open("asd", "a")
        f.write(s)
        f.close()
        lock.release()
...
И да, еще хотел бы посмотреть на примеры реализации multiprocessing в каких-то схожих задачах, желательно не уровня helloworld, а посложнее, имеющих практическое применение.
Soteric
База данных сама берет на себя проблему синхронизации. Просто пишите в нее, а она внутри разрулит.
Shaman
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)
Soteric
Shaman, это лок на локальной переменной. Так не будет работать.
Shaman
подправил. с multiprocessing дел не имел.
Shaman
Soteric
Shaman, это лок на локальной переменной. Так не будет работать.
Я тут немножко поразмышлял… Это точно имеет значение?
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