Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 9, 2011 16:47:13

DcDr
От:
Зарегистрирован: 2011-01-09
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

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

DcDr
#pool = psycopg2.pool.ThreadedConnectionPool(5, 10, ‘host=127.0.0.1 user=test dbname=test password=test’)
pool = psycopg2.pool.PersistentConnectionPool(5, 10, ‘host=127.0.0.1 user=test dbname=test password=test’)
И с первым и со вторым пулом получается примерно то же самое по скорости. Для теста одной программой.
Как там на реальном веб-сервере - запускаются ли запросы в одном экземпляре интерпретатора Python, в разных ли - зависит от конкретной настройки веб-сервера.
Потому реальное нагрузочное тестирование покажет другое.



Офлайн

#2 Фев. 10, 2011 07:22:43

DcDr
От:
Зарегистрирован: 2011-01-09
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

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

DcDr
Переделал на пулы.

Один запуск:
{'create pool': '0.1290'}
{'connect 1': '0.0000', 'create pool': '0.1290'}
{'connect 2': '0.0000', 'connect 1': '0.0000', 'create pool': '0.1290'}
{'connect 3': '0.0000', 'connect 2': '0.0000', 'connect 1': '0.0000', 'create pool': '0.1290'}
Если не очевидно, то: пул нужно создавать единожды, при запуске веб-приложения, а обращаться к пулу за коннектами - при отработке каждого веб-запроса.



Офлайн

#3 Фев. 11, 2011 07:00:17

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

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

если движок работает через wsgi/uwsgi/fcgi, то подключение можно сделать при запуске приложения, и для каждого клиента будет использоваться одно и то же подключение (в пределах процесса).

Отредактировано (Фев. 11, 2011 07:00:39)

Офлайн

#4 Фев. 11, 2011 08:57:30

DcDr
От:
Зарегистрирован: 2011-01-09
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

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

o7412369815963
если движок работает через wsgi/uwsgi/fcgi, то подключение можно сделать при запуске приложения, и для каждого клиента будет использоваться одно и то же подключение (в пределах процесса).
Вы имеете ввиду, что будет на веб-сервере будет запущен ровно 1 процесс через WSGI и он будет отрабатывать одновременно не более 1 веб-запроса?



Отредактировано (Фев. 11, 2011 08:57:50)

Офлайн

#5 Март 12, 2011 01:39:57

AlexanderDanilov
От: Ukraine, Kiev
Зарегистрирован: 2007-10-17
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

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

o7412369815963
если движок работает через wsgi/uwsgi/fcgi, то подключение можно сделать при запуске приложения, и для каждого клиента будет использоваться одно и то же подключение (в пределах процесса).
Спасибо за ответ. Уточните, пожалуйста, правильно ли я понимаю, что код, который выполняется до вызова application, выполняется при старте, а тот код, что внутри application, выполняется на каждый запрос. Следовательно, коннект лучше делать до выполнения application?



Офлайн

#6 Март 12, 2011 08:07:46

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Chuck
Уточните, пожалуйста, правильно ли я понимаю, что код, который выполняется до вызова application, выполняется при старте
Выполняется при страте, но всего 1 раз после перезагрузки веб-сервера.



Офлайн

#7 Март 12, 2011 16:05:08

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

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

DcDr
o7412369815963
если движок работает через wsgi/uwsgi/fcgi, то подключение можно сделать при запуске приложения, и для каждого клиента будет использоваться одно и то же подключение (в пределах процесса).
Вы имеете ввиду, что будет на веб-сервере будет запущен ровно 1 процесс через WSGI и он будет отрабатывать одновременно не более 1 веб-запроса?
это зависит от настроек wsgi, например у меня на одном из сайтов: 2 процесса по 15 потоков, итого 30 потоков = 30 одновременных веб обращения, на каждый процесс (при старте) создается подключение к БД. Разделение на процессы для того что-б потоки между собой не толкались gil-ом.

Отредактировано (Март 12, 2011 16:06:09)

Офлайн

#8 Март 12, 2011 18:29:35

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

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

o7412369815963
Разделение на процессы для того что-б потоки между собой не толкались gil-ом.
Странное объяснение, ведь треды то всё равно есть. Смысл разбиения на процессы в другом.



Офлайн

#9 Март 12, 2011 21:24:33

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

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

Александр Кошелев
o7412369815963
Разделение на процессы для того что-б потоки между собой не толкались gil-ом.
Странное объяснение, ведь треды то всё равно есть. Смысл разбиения на процессы в другом.
если в пределах одного процесса, 1 поток повиснет в gil'e то остальные потоки будут тупо висеть и ждать его освобождения.
например этот код повесит все потоки в процессе:
if -1 in xrange(10**12): pass

Офлайн

#10 Март 12, 2011 21:40:01

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

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

Ммм. А более правдоподобный пример?



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version