Уведомления

Группа в Telegram: @pythonsu

#1 Март 13, 2011 01:02:17

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Долгий коннект к Postgresql

Андрей Светлов
Ммм. А более правдоподобный пример?
ну можно гипотетический прикинуть, например запрос длиться 500мс, 70% тратиться на запрос к БД, 30% генерация страницы из них 10% ушло на gil. итого 15мс.
при 50 одновременных подключениях, последний запрос уйдет через 50*15мс + 500мс(на сам запрос) = 1250мс.
если будет 2 процесса вместо одного, то: 50/2*15мс + 500мс = 875мс.

теоретический так

Офлайн

#2 Март 13, 2011 05:55:11

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Долгий коннект к Postgresql

Ааа. Когда я спрашивал - имел в виду

>>> def f():
... if -1 in xrange(10**12): pass
>>> import dis
>>> dis.dis(f)
3 0 LOAD_CONST 1 (-1)
3 LOAD_GLOBAL 0 (xrange)
6 LOAD_CONST 4 (1000000000000)
9 CALL_FUNCTION 1
12 COMPARE_OP 6 (in)
15 JUMP_IF_FALSE 4 (to 22)
18 POP_TOP
19 JUMP_FORWARD 1 (to 23)
>> 22 POP_TOP
>> 23 LOAD_CONST 0 (None)
26 RETURN_VALUE
Проверка на ‘in’ делается в COMPARE_OP. GIL не освобождается, что очень неприятно.
В реальном коде таких ситуаций практически не бывает.

“70% тратиться на запрос к БД, 30% генерация страницы из них 10% ушло на gil” - неправильно так считать.
Если шаблонизатор написан на питоне, то блокируются все 30%. Т.е. в процессе следует запускать три потока (может - четыре).
С третьей стороны, заводить процессов больше, чем имеется ядер - бессмысленно. Да и БД тоже нужно работать, если она заведена на той же машине.
На самом деле, конечно, картина гораздо сложнее. Кажется, правильные цифры подбираются только эмпирически, глядя на графики загрузки.

К тому же GIL - не единственная блокировка в программе. Как минимум в DBAPI их еще пачка (а есть еще и фреймворк, который тоже может быть под вопросом). Раскидывание на процессы хорошо помогает еще и в таких вещах.



Офлайн

#3 Март 13, 2011 08:05:03

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Долгий коннект к Postgresql

Андрей Светлов
неправильно так считать.
я только для примера
Андрей Светлов
Кажется, правильные цифры подбираются только эмпирически, глядя на графики загрузки.
согласен

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version