ФорумПрограммированиеPython → Выбор веб-сервера для многопоточного Python приложения

Выбор веб-сервера для многопоточного Python приложения

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 6 октября 2015 г. 0:23, спустя 4 минуты 57 секунд

    Борт прав

    @adw0rd, это кто такой ?

    Сапожник без сапог
  • mathete

    Сообщения: 435 Репутация: N Группа: Джедаи

    Spritz 6 октября 2015 г. 0:25, спустя 1 минуту 22 секунды

    @adw0rd, о!

    Я и забыл же, что я теперь Борт.

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 6 октября 2015 г. 0:26, спустя 56 секунд

    wtf :)

    Сапожник без сапог
  • mathete

    Сообщения: 435 Репутация: N Группа: Джедаи

    Spritz 6 октября 2015 г. 0:29, спустя 2 минуты 57 секунд

    @phpdude, было так:

    [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)

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 6 октября 2015 г. 0:40, спустя 11 минут 12 секунд

    ужс

    Сапожник без сапог
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 6 октября 2015 г. 3:49, спустя 3 часа 9 минут 38 секунд

    Да, автоисправление в телефоне творит чудеса

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Crank

    Сообщения: 542 Репутация: N Группа: Джедаи

    Spritz 6 октября 2015 г. 9:43, спустя 5 часов 53 минуты 34 секунды

    @adw0rd, как бы да, но у меня на dev сервере стояло с незапамятных времен. Поэтому сначала mod_wsgi настроил благо там всего 2 строчки вписать. А потом решил раз за джангу взялся значит надо по феншую делать чтоб потом не переебывать.

  • ArtemVortax

    Сообщения: 48 Репутация: N Группа: Адекваты

    Spritz 7 октября 2015 г. 3:30, спустя 17 часов 47 минут 8 секунд

    Сотрудничать с чудо-быдлокодерскими скриптами на питоне ни один из перечисленных выше веб-серверов не согласился. Только runserver непривередливо обслуживал моих пауков. И то, спустя некоторое время после старта, процессор "забивался" питоном до 100%, почему я так и не понял.
    Остальные веб-сервера грузили проц сразу после старта, даже в холостом режиме без нагрузки. Мучений с меня хватило, и я решил переписать все это дело на другой платформе.

    С Erlang я не знаком, поэтому сегодня переписал парсер на Node.js по совету mathete. Конечно, асинхронность "из коробки" сделала свое дело. Все работает быстро, без сбоев и проц не загружен. Но поскольку нужна максимальна отдача от парсера, "незагруженность" процессора и стала проблемой.
    В разработке я использовал модуль async. Со своей задачей управления асинхронностью он справляется замечательно. Но производительности не добавляет. Как я только не извращался, запустить параллельно два парсера непосредственно из ноды не получалось, и они работали синхронно. Изнутри закрыть вопрос не получилось.
    Тогда я зашел с другой стороны, запуском пауков из двух консолей одновременно я "решил" проблему, крутилось сразу два парсера, все замечательно - только неудобно. Тогда на помощь пришел nohup и модуль shell.js. Через shell.js nohup'ом я запускаю несколько копий паука, и они работают на всю катушку.

    Вообще Node.js сильно радует большим количеством написанных библиотек практически под все нужды.

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 7 октября 2015 г. 3:40, спустя 10 минут 19 секунд

    @ArtemVortax, меня не покидает ощущение, что ты что-то делаешь не так ))))

    Спустя 30 сек.

    обычно грабли расставлены на дорожке, которая была выбрана неверно, по газону чтоли если выражаться образно )

    Сапожник без сапог
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 7 октября 2015 г. 4:21, спустя 40 минут 51 секунду

    @phpdude, +1

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Crank

    Сообщения: 542 Репутация: N Группа: Джедаи

    Spritz 7 октября 2015 г. 12:37, спустя 8 часов 15 минут 43 секунды

    @ArtemVortax, я правильно понимаю что ты судишь о производительности парсеров по загрузке процессора? Может ты уже канал данными забил по полной, так откуда тогда ей рости?

  • mathete

    Сообщения: 435 Репутация: N Группа: Джедаи

    Spritz 7 октября 2015 г. 13:51, спустя 1 час 14 минут 23 секунды

    @ArtemVortax, что такое процессор? Ядро или все ядра?

    Чтобы нагрузить ядро, тебе просто надо больше заданий запустить. Я представляю, примерно, что после питона на тредах, обрабатывающего 10 страниц в секунду с загрузкой cpu 100%, nodejs с 100 страниц выглядит непривычно...

    Подумай, откуда взяться нагрузке на процессор, если как-таковое ты ничего не делаешь - установили коннект, без блокировки получили данные, разобрали их с помощью нативного кода (v8 прекомпилирует js-скрипт в натив текущего процессора) и всё.

    А чтобы все ядра нагрузить, то либо supervisord - указываешь сколько надо тебе однотипных процессов, или Cluster Node.js v4.1.2 Manual & Documentation [nodejs.org]. Первое понадёжнее (ну как молоток), второе поудобнее - мастер процесс, сообщения, инфраструктура короче.

  • ArtemVortax

    Сообщения: 48 Репутация: N Группа: Адекваты

    Spritz 7 октября 2015 г. 14:37, спустя 45 минут 7 секунд

    @ArtemVortax, что такое процессор? Ядро или все ядра?

    Чтобы нагрузить ядро, тебе просто надо больше заданий запустить. Я представляю, примерно, что после питона на тредах, обрабатывающего 10 страниц в секунду с загрузкой cpu 100%, nodejs с 100 страниц выглядит непривычно...

    Подумай, откуда взяться нагрузке на процессор, если как-таковое ты ничего не делаешь - установили коннект, без блокировки получили данные, разобрали их с помощью нативного кода (v8 прекомпилирует js-скрипт в натив текущего процессора) и всё.

    А чтобы все ядра нагрузить, то либо supervisord - указываешь сколько надо тебе однотипных процессов, или https://nodejs.org/api/cluster.html. Первое понадёжнее (ну как молоток), второе поудобнее - мастер процесс, сообщения, инфраструктура короче.

    @mathete, на сервере одно ядро. Насколько я знаю, cluster для многоядерных систем

  • ArtemVortax

    Сообщения: 48 Репутация: N Группа: Адекваты

    Spritz 7 октября 2015 г. 14:42, спустя 5 минут 34 секунды

    Как вариант, запустить супервизором десяток серверов на разных портах, и при необходимости их нагружать.

  • mathete

    Сообщения: 435 Репутация: N Группа: Джедаи

    Spritz 7 октября 2015 г. 14:49, спустя 6 минут 58 секунд

    @ArtemVortax, да, конечно. Я просто давным-давно не видел сервера с одним ядром))

    Тогда просто парси больше страниц.

    Запускать несколько процессов на одном ядре смысла не имеет. И не важно как ты это будешь делать - руками, supervisord, cluster и т.п. Общий рантайм процесса прожорливый, а ты его множишь (и пофиг что в основе - loop, multithread и т.п.). Можешь запустить один процесс с 100 страниц в единицу времени и запустить 10 процессов по 10 страниц и посмотреть загрузку.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!