@spbpython

Страница 171 из 785
Zart
26.10.2016
13:09:34
ээ... а сейчас к мусклю чем подключение идет-то?

Serge
26.10.2016
13:09:42
начать может надо с изучения метрик - искать узкие места
это, кстати, да, но мы же не думаем, что топик стартер просто так на базу грешит, без причины...

Google
Serge
26.10.2016
13:10:40
gil отпускается на i/o и сишных расширениях
при чем тут gil и io? gil отпускается, когда передается управление другому треду. на блокирующем io этого не происходит.

Zart
26.10.2016
13:11:06
sqlalchemy не работает с базами. это обёртки, тредпул и орм

Serge
26.10.2016
13:12:52
ну, вот мне тоже кажется, что люди на торнадо писали и знали как надо базку пользовать

Dmitry вы профилировали приложение как-то?

может просто "настал момент"

и пора запустить второй процесс?

Zart
26.10.2016
13:14:19
на скорости 200км/ч мерседеса обгоняет запорожец. его водила скорчив зверскую гримасу рычит "а теперь - вторая!"

в худшем случае можно купить пока тазик помощнее и заняться рефакторингом

Dmitry
26.10.2016
13:15:40
Dmitry вы профилировали приложение как-то?
процессов сейчас итак запускаем штук 50 на сервер. Не профилировали толком, но от совсем долгих запросов постарались избавиться, но тем не менее оно не вывозит.

Zart
26.10.2016
13:16:10
вроде ж считается оптимальным гонять колво ядер + пара сверху...

Roman
26.10.2016
13:16:16
при чем тут gil и io? gil отпускается, когда передается управление другому треду. на блокирующем io этого не происходит.
я несколько криво выразился :) допустим, мы из основного треда породили ещё 1 и в нем с интервалом в 50мс выплёвываем а stderr "hello world". если основной тред заблокируется, то в stderr по-прежнему с интервалом в 50мс будет что-то печататься.

Google
Dmitry
26.10.2016
13:16:49
Zart
26.10.2016
13:17:00
ага... т.е. тазик приличный

Serge
26.10.2016
13:17:11
ну, значит нужен второй тазик;)

Zart
26.10.2016
13:17:16
брать второй и лоадбалансить..

причем может лоадбалансить не веб, а мускль

Dmitry
26.10.2016
13:17:43
брать второй и лоадбалансить..
у нас итак далео не один сервер

Serge
26.10.2016
13:18:00
а нагрузка на CPU какая?

Roman
26.10.2016
13:18:07
как бы хер
эээ... теперь я в смятении. что бы такое почитать чтобы заведомо заблокироваться?

Serge
26.10.2016
13:18:18
если базка на отдельном сервере и нагрузка на проц большая, то базка не при чем

GNU/Docker
26.10.2016
13:18:34
метрики пособирать реально

чо ваще

Serge
26.10.2016
13:18:52
эээ... теперь я в смятении. что бы такое почитать чтобы заведомо заблокироваться?
ну пошли запрос http на сервер который заакцептит и будет молчать

Zart
26.10.2016
13:18:53
надо мерять. причем всю цепочку - от фронта до базы...

GNU/Docker
26.10.2016
13:18:54
ну и на работу с базой посмотреть.

потому что орм прячет не детали базы от программистов, а плохое знание программистами конкретной БД)

Dmitry
26.10.2016
13:19:51
а нагрузка на CPU какая?
сам tornado грузит где-то 15-20% от всех ядер (не от одного). При этом на серваках еще есть другой софт, но теоретически можно было бы дойти до того, чтобы tornado грузил 50%

Zart
26.10.2016
13:23:17
а, можно проще. почитать stdin
а как это всё связано с гил?

Serge
26.10.2016
13:25:19
The GIL is controversial because it prevents multithreaded CPython programs from taking full advantage of multiprocessor systems in certain situations. Note that potentially blocking or long-running operations, such as I/O, image processing, and NumPy number crunching, happen outside the GIL. Therefore it is only in multithreaded programs that spend a lot of time inside the GIL, interpreting CPython bytecode, that the GIL becomes a bottleneck.

Google
Serge
26.10.2016
13:25:23
хм...

Zart
26.10.2016
13:25:50
цпу баунд треды хавают гил по черному

ну и опять же, помним про new gil в 3.3

Serge
26.10.2016
13:26:54
ну, тут вопрос "как заблокируется"

Zart
26.10.2016
13:27:10
бизли там офигенные картинки рисовал, в частности про конвойный эффект в новом гил при смешивании и/о и цпу баунд тредов

Serge
26.10.2016
13:27:11
на чистом системном io - да, норм

Roman
26.10.2016
13:29:28
на чистом системном io - да, норм
https://gist.github.com/anonymous/05ff1e1509cdbc964e13ab5b339d802e

Zart
26.10.2016
13:29:53
www.dabeaz.com/python/NewGIL.pdf вот это надо обязательно знать про гил

Dmitry
26.10.2016
13:30:53
Ладно, всем спасибо. Но, я так понимаю, что опыта решения подобной проблему ни у кого нет?

Dmitry
26.10.2016
13:31:26
Zart
26.10.2016
13:31:37
ну это как лечить пациента по его детским фотографиям...

Roman
26.10.2016
13:32:14
что бд?
вы утверждаете, что виновно общение с бд. на чём основано данное утверждение? вообще, возьмите тот же vmprof и постройте flamegraph )

Ладно, всем спасибо. Но, я так понимаю, что опыта решения подобной проблему ни у кого нет?
нет пока проблемы как таковой. tornado - это event loop, где всё блокирующее должно исполнятся в пуле тредов. если вы этого не делаете - сделайте. если сделали и не помогло - надо профайлить.

Dmitry
26.10.2016
13:35:12
вы утверждаете, что виновно общение с бд. на чём основано данное утверждение? вообще, возьмите тот же vmprof и постройте flamegraph )
Честно сказать, исследование этого кода проводил не я. Насколько я знаю, тут не использовались какие-либо профилировщики, а просто подавалась нагрузка и исследовалось поведение в зависимости от того, за сколько отвечает база и т.п. Проблемы тут вряд ли связаны с чем-то кроме базы просто потому, что приложение в основном только и делает, что ходит в базу, без всяких вычислений.

Serge
26.10.2016
13:35:17
Ладно, всем спасибо. Но, я так понимаю, что опыта решения подобной проблему ни у кого нет?
есть. только с такой формулировкой решение проблемы - процесс измерения, анализа и оптимизации, а не ответ "нажми сюда"

ну вот, если нужен драйвер под торнаду, я дал ссылку, драйвер - это то что под sqlalchemy у вас работает и собственно ходит в базу

Google
Dmitry
26.10.2016
13:39:12
Всем спасибо, думаю мне лучше вернуться уже завтра

Serge
26.10.2016
13:39:28
и лучше к исследованию приложения;)

Roman
26.10.2016
13:39:48
https://github.com/brutasse/graphite-api/blob/master/graphite_api/functions.py#L68-L71

вот зачем так писать?

Zart
26.10.2016
13:40:43
return reduce(operator.sub, safeValues)

Serge
26.10.2016
13:44:52
потому что reduce надо импортить в 3-ке

а если оно под оба, то придется что-то делать

Zart
26.10.2016
13:45:36
try: reduce except NameError: from functools import reduce

Serge
26.10.2016
13:46:01
именно это я и называю что-то делать

Admin
ERROR: S client not available

Zart
26.10.2016
13:46:12
ну или брать бгмерзкий six

Serge
26.10.2016
13:46:15
и они разные, нно для этого кейса не критично

Zart
26.10.2016
13:46:19
где всё сделато за нас

Serge
26.10.2016
13:46:32
там, кстати, не всё;)

Zart
26.10.2016
13:47:03
ну я про вот эти вот проверки 2/3 и приведение импортов к общему знаменателю

Roman
26.10.2016
13:47:19
ну или брать бгмерзкий six
а чем он богомерзкий?

Zart
26.10.2016
13:47:28
а накой он?

Serge
26.10.2016
13:47:48
ну я про вот эти вот проверки 2/3 и приведение импортов к общему знаменателю

вот за этим;)

но там не всё;)

Google
Serge
26.10.2016
13:48:11
я вечно натыкаюсь что там чего-нибудь нет

Zart
26.10.2016
13:48:16
по мне проще вставить пару except ImportError с фоллбаками

Serge
26.10.2016
13:48:17
в смысле не покрыто

Zart
26.10.2016
13:48:36
чем тащить полновесный пакадж, который еще и ломает порой серьезно код

Serge
26.10.2016
13:49:13
когда у тебя только два импорта да, но часто он уже есть

Roman
26.10.2016
13:49:23
Нашел в продакшен коде))

GNU/Docker
26.10.2016
13:49:33
обычно оно быстро превращается в собственный compat.py

Костлей

Serge
26.10.2016
13:49:57
GNU/Docker
26.10.2016
13:49:58
> Костлей

Serge
26.10.2016
13:50:42
просто если ты уже написал метакласс с six и заюзаз строки оттуда, то можно и для импортов уже six

Zart
26.10.2016
13:51:20
нууу... если нужна настолько тяжелая артиллерия, то можно и сикс потащить

я ни разу не против оправданных зависимостей

а тащить сикс вместо банального from __future__ import print_function, unicode_literals порой оверкилл

вот зачем так писать?
кстати, а что, напоролся на чтото?

Roman
26.10.2016
13:59:17
кстати, а что, напоролся на чтото?
да тут в devops рассказывали что можно графит ускорить раза в 3 запустив на pypy и что pypy не любит всякую магию и для него list comprehensions - это плохо.

Zart
26.10.2016
13:59:46
ээээ

Roman
26.10.2016
13:59:48
но на самом деле list comprehensions в pypy быстрее

Страница 171 из 785