Найти - Пользователи
Полная версия: Парсер Multiproccesing+threading
Начало » Network » Парсер Multiproccesing+threading
1 2
juche-songun
Я конечно понимаю это извращение но допустим создать 1000 процесов с 2 потоками, для эфективного парсинга или непарить себя и просто создать 2к процессов.
reclosedev
Особого смысла создавать столько процессов нет. Оптимальное число примерно равно количеству ядер процессора. Если же обработка не сильно нагружает процессор, а основное время тратится на IO, от многопроцессорности будет только оверхед на передачу данных между процессами.

При таком количестве потоков уже нужно смотреть в сторону асинхронного IO. Например, gevent + grequests, scrapy или grab spider.
doza_and
juche-songun
или непарить себя
А вы проблему опишите если она есть. А так мы посоветуем не парить себя и делать все в одном потоке и одном процессе.
Разница:
много потоков - общая память потоков меньше затраты времени и памяти, но GIL
много процессов - нет GIL но затраты на передачу данных между процессами, либо на сериализацию - это потери производительности, либо на организацию общих областей памяти - это затраты труда программиста.

ps :) судя по тому сколько вы используете процессов, то вы работаете на высокопроизводительном кластере в котором не меньше сотни машин, или на суперкомпьютере. Тогда однозначно без большого числа процессов не обойтись.
juche-songun
простой парсер, конетнта есть 5 лямов ссылок. пхп их проходит за сутки, охото перенести его на питон с максимальной загрузкой CPU, хотел сделать через треды но урлиб и прочее очень часто выдавали ДНС ошибки или таймаут, насколько я понял на создать 8 процессов на 8 ядер и использовать асинхронку на каждый процесс?
Soteric
Можно больше 8, поскольку пока выполняется запрос поток и ядро будут простаивать.
doza_and
не спец по парсингу сайтов но может это поможет прояснить ситуацию:
http://habrahabr.ru/post/134918/
d1ffuz0r
прописываю автору Erlang
juche-songun
Ребята, вы “наркоманы штоле?” ей богу, я спрашивал про потоки, а не про то чем парсить!
Допустим будет ли эффективен 1000 процессов с грабом или другим асинхронным парсером, и чем можно замерить эффективность?
juche-songun
Ребята, вы “наркоманы штоле?” ей богу, я спрашивал про потоки, а не про то чем парсить!
Допустим будет ли эффективен 1000 процессов с грабом или другим асинхронным парсером, и чем можно замерить эффективность?
reclosedev
juche-songun
чем можно замерить эффективность?
Считать количество обработанных данных/запросов в секунду (в коде); смотреть на загруженность канала, процессора, памяти (в системе).

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

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

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

P.S.
Зачем еще одна тема?
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