Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 2, 2012 23:50:36

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

Парсер Multiproccesing+threading

Я конечно понимаю это извращение но допустим создать 1000 процесов с 2 потоками, для эфективного парсинга или непарить себя и просто создать 2к процессов.

Офлайн

#2 Ноя. 3, 2012 07:56:35

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Парсер Multiproccesing+threading

Особого смысла создавать столько процессов нет. Оптимальное число примерно равно количеству ядер процессора. Если же обработка не сильно нагружает процессор, а основное время тратится на IO, от многопроцессорности будет только оверхед на передачу данных между процессами.

При таком количестве потоков уже нужно смотреть в сторону асинхронного IO. Например, gevent + grequests, scrapy или grab spider.

Офлайн

#3 Ноя. 3, 2012 08:31:08

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Парсер Multiproccesing+threading

juche-songun
или непарить себя
А вы проблему опишите если она есть. А так мы посоветуем не парить себя и делать все в одном потоке и одном процессе.
Разница:
много потоков - общая память потоков меньше затраты времени и памяти, но GIL
много процессов - нет GIL но затраты на передачу данных между процессами, либо на сериализацию - это потери производительности, либо на организацию общих областей памяти - это затраты труда программиста.

ps :) судя по тому сколько вы используете процессов, то вы работаете на высокопроизводительном кластере в котором не меньше сотни машин, или на суперкомпьютере. Тогда однозначно без большого числа процессов не обойтись.



Отредактировано doza_and (Ноя. 3, 2012 08:36:49)

Офлайн

#4 Ноя. 3, 2012 15:18:45

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

Парсер Multiproccesing+threading

простой парсер, конетнта есть 5 лямов ссылок. пхп их проходит за сутки, охото перенести его на питон с максимальной загрузкой CPU, хотел сделать через треды но урлиб и прочее очень часто выдавали ДНС ошибки или таймаут, насколько я понял на создать 8 процессов на 8 ядер и использовать асинхронку на каждый процесс?

Офлайн

#5 Ноя. 3, 2012 15:50:47

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

Парсер Multiproccesing+threading

Можно больше 8, поскольку пока выполняется запрос поток и ядро будут простаивать.



Офлайн

#6 Ноя. 3, 2012 18:44:50

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Парсер Multiproccesing+threading

не спец по парсингу сайтов но может это поможет прояснить ситуацию:
http://habrahabr.ru/post/134918/



Офлайн

#7 Ноя. 3, 2012 18:45:05

d1ffuz0r
От: Moscow
Зарегистрирован: 2011-03-25
Сообщения: 127
Репутация: +  5  -
Профиль   Отправить e-mail  

Парсер Multiproccesing+threading

прописываю автору Erlang

Офлайн

#8 Ноя. 3, 2012 22:16:30

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

Парсер Multiproccesing+threading

Ребята, вы “наркоманы штоле?” ей богу, я спрашивал про потоки, а не про то чем парсить!
Допустим будет ли эффективен 1000 процессов с грабом или другим асинхронным парсером, и чем можно замерить эффективность?

Офлайн

#9 Ноя. 3, 2012 22:16:57

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

Парсер Multiproccesing+threading

Ребята, вы “наркоманы штоле?” ей богу, я спрашивал про потоки, а не про то чем парсить!
Допустим будет ли эффективен 1000 процессов с грабом или другим асинхронным парсером, и чем можно замерить эффективность?

Офлайн

#10 Ноя. 4, 2012 08:48:35

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Парсер Multiproccesing+threading

juche-songun
чем можно замерить эффективность?
Считать количество обработанных данных/запросов в секунду (в коде); смотреть на загруженность канала, процессора, памяти (в системе).

По опыту: асинхронный скрапер с незатратной обработкой данных на одном ядре упирается в сеть. Но это для канала до 100 Мбит/с. А если все данные находятся на одном сайте, то скорее сайт загнется, если не ограничить коннекты.

juche-songun
насколько я понял на создать 8 процессов на 8 ядер и использовать асинхронку на каждый процесс?
Если для обработки полученных данных нужно много ресурсов процессора (математика, большие html/xml) или канал большой и один процесс его не загружает, то есть смысл использовать несколько процессов (в районе количества ядер). Или сделать 1(2) процесс(а) асинхронных скраперов для сбора данных, остальные для обработки. Но тут уже может в базу/диск упереться.

juche-songun
хотел сделать через треды но урлиб и прочее очень часто выдавали ДНС ошибки или таймаут
Это наверное сайту плохо.

P.S.
Зачем еще одна тема?

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version