[10:05:45 AM] adw0rd: Борт, можешь одолжить свой Карвер на выхи, хочу с сестренкой покататься если погода будет
[10:06:10 AM] adw0rd: Борт))))
[10:07:01 AM] adw0rd: Ну если ты сам не захочешь конечно ))
[10:09:16 AM] mathete: Ну за такой подгон, конечно))
[10:09:20 AM] mathete: Bort
[10:09:27 AM] mathete: пойду ники себе везде переделаю
[10:10:34 AM] mathete: как-то так https://en.wikipedia.org/wiki/Bort_(disambiguation)
[10:12:10 AM] adw0rd: Да, ник крутой или как минимум название фреймворка
[10:12:29 AM] mathete: так будут звать новый js движок
[10:12:36 AM] adw0rd: Ахаха
[10:12:57 AM] mathete: у тебя чего за движок? v8? ... а... ну-ну, у меня-то Bort!
[10:14:35 AM] adw0rd: Бортовой фреймворк (flex) (fistbump)
@adw0rd, как бы да, но у меня на dev сервере стояло с незапамятных времен. Поэтому сначала mod_wsgi настроил благо там всего 2 строчки вписать. А потом решил раз за джангу взялся значит надо по феншую делать чтоб потом не переебывать.
Сотрудничать с чудо-быдлокодерскими скриптами на питоне ни один из перечисленных выше веб-серверов не согласился. Только runserver непривередливо обслуживал моих пауков. И то, спустя некоторое время после старта, процессор "забивался" питоном до 100%, почему я так и не понял.
Остальные веб-сервера грузили проц сразу после старта, даже в холостом режиме без нагрузки. Мучений с меня хватило, и я решил переписать все это дело на другой платформе.
С Erlang я не знаком, поэтому сегодня переписал парсер на Node.js по совету mathete. Конечно, асинхронность "из коробки" сделала свое дело. Все работает быстро, без сбоев и проц не загружен. Но поскольку нужна максимальна отдача от парсера, "незагруженность" процессора и стала проблемой.
В разработке я использовал модуль async. Со своей задачей управления асинхронностью он справляется замечательно. Но производительности не добавляет. Как я только не извращался, запустить параллельно два парсера непосредственно из ноды не получалось, и они работали синхронно. Изнутри закрыть вопрос не получилось.
Тогда я зашел с другой стороны, запуском пауков из двух консолей одновременно я "решил" проблему, крутилось сразу два парсера, все замечательно - только неудобно. Тогда на помощь пришел nohup и модуль shell.js. Через shell.js nohup'ом я запускаю несколько копий паука, и они работают на всю катушку.
Вообще Node.js сильно радует большим количеством написанных библиотек практически под все нужды.
@ArtemVortax, я правильно понимаю что ты судишь о производительности парсеров по загрузке процессора? Может ты уже канал данными забил по полной, так откуда тогда ей рости?
@ArtemVortax, что такое процессор? Ядро или все ядра?
Чтобы нагрузить ядро, тебе просто надо больше заданий запустить. Я представляю, примерно, что после питона на тредах, обрабатывающего 10 страниц в секунду с загрузкой cpu 100%, nodejs с 100 страниц выглядит непривычно...
Подумай, откуда взяться нагрузке на процессор, если как-таковое ты ничего не делаешь - установили коннект, без блокировки получили данные, разобрали их с помощью нативного кода (v8 прекомпилирует js-скрипт в натив текущего процессора) и всё.
А чтобы все ядра нагрузить, то либо supervisord - указываешь сколько надо тебе однотипных процессов, или Cluster Node.js v4.1.2 Manual & Documentation [nodejs.org]. Первое понадёжнее (ну как молоток), второе поудобнее - мастер процесс, сообщения, инфраструктура короче.
@ArtemVortax, что такое процессор? Ядро или все ядра?
Чтобы нагрузить ядро, тебе просто надо больше заданий запустить. Я представляю, примерно, что после питона на тредах, обрабатывающего 10 страниц в секунду с загрузкой cpu 100%, nodejs с 100 страниц выглядит непривычно...
Подумай, откуда взяться нагрузке на процессор, если как-таковое ты ничего не делаешь - установили коннект, без блокировки получили данные, разобрали их с помощью нативного кода (v8 прекомпилирует js-скрипт в натив текущего процессора) и всё.
А чтобы все ядра нагрузить, то либо supervisord - указываешь сколько надо тебе однотипных процессов, или https://nodejs.org/api/cluster.html. Первое понадёжнее (ну как молоток), второе поудобнее - мастер процесс, сообщения, инфраструктура короче.
@mathete, на сервере одно ядро. Насколько я знаю, cluster для многоядерных систем
@ArtemVortax, да, конечно. Я просто давным-давно не видел сервера с одним ядром))
Тогда просто парси больше страниц.
Запускать несколько процессов на одном ядре смысла не имеет. И не важно как ты это будешь делать - руками, supervisord, cluster и т.п. Общий рантайм процесса прожорливый, а ты его множишь (и пофиг что в основе - loop, multithread и т.п.). Можешь запустить один процесс с 100 страниц в единицу времени и запустить 10 процессов по 10 страниц и посмотреть загрузку.