Найти - Пользователи
Полная версия: Долгий коннект к Postgresql
Начало » Базы данных » Долгий коннект к Postgresql
1 2 3
DcDr
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, в разных ли - зависит от конкретной настройки веб-сервера.
Потому реальное нагрузочное тестирование покажет другое.
DcDr
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'}
Если не очевидно, то: пул нужно создавать единожды, при запуске веб-приложения, а обращаться к пулу за коннектами - при отработке каждого веб-запроса.
o7412369815963
если движок работает через wsgi/uwsgi/fcgi, то подключение можно сделать при запуске приложения, и для каждого клиента будет использоваться одно и то же подключение (в пределах процесса).
DcDr
o7412369815963
если движок работает через wsgi/uwsgi/fcgi, то подключение можно сделать при запуске приложения, и для каждого клиента будет использоваться одно и то же подключение (в пределах процесса).
Вы имеете ввиду, что будет на веб-сервере будет запущен ровно 1 процесс через WSGI и он будет отрабатывать одновременно не более 1 веб-запроса?
AlexanderDanilov
o7412369815963
если движок работает через wsgi/uwsgi/fcgi, то подключение можно сделать при запуске приложения, и для каждого клиента будет использоваться одно и то же подключение (в пределах процесса).
Спасибо за ответ. Уточните, пожалуйста, правильно ли я понимаю, что код, который выполняется до вызова application, выполняется при старте, а тот код, что внутри application, выполняется на каждый запрос. Следовательно, коннект лучше делать до выполнения application?
dimabest
Chuck
Уточните, пожалуйста, правильно ли я понимаю, что код, который выполняется до вызова application, выполняется при старте
Выполняется при страте, но всего 1 раз после перезагрузки веб-сервера.
o7412369815963
DcDr
o7412369815963
если движок работает через wsgi/uwsgi/fcgi, то подключение можно сделать при запуске приложения, и для каждого клиента будет использоваться одно и то же подключение (в пределах процесса).
Вы имеете ввиду, что будет на веб-сервере будет запущен ровно 1 процесс через WSGI и он будет отрабатывать одновременно не более 1 веб-запроса?
это зависит от настроек wsgi, например у меня на одном из сайтов: 2 процесса по 15 потоков, итого 30 потоков = 30 одновременных веб обращения, на каждый процесс (при старте) создается подключение к БД. Разделение на процессы для того что-б потоки между собой не толкались gil-ом.
Александр Кошелев
o7412369815963
Разделение на процессы для того что-б потоки между собой не толкались gil-ом.
Странное объяснение, ведь треды то всё равно есть. Смысл разбиения на процессы в другом.
o7412369815963
Александр Кошелев
o7412369815963
Разделение на процессы для того что-б потоки между собой не толкались gil-ом.
Странное объяснение, ведь треды то всё равно есть. Смысл разбиения на процессы в другом.
если в пределах одного процесса, 1 поток повиснет в gil'e то остальные потоки будут тупо висеть и ждать его освобождения.
например этот код повесит все потоки в процессе:
if -1 in xrange(10**12): pass
Андрей Светлов
Ммм. А более правдоподобный пример?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB