Странно, что мое соединение SQLALCHEMY MySQL всегда заканчивается тем, что спит?

StackOverflow https://stackoverflow.com/questions/8824826

Вопрос

У меня есть веб -приложение Flask с использованием SQLalchemy с MySQL, и я установил ScopedSession (). У меня также есть обработчик Teardown_Request, который вызывает Session.Remove () после завершения каждого запроса. По какой -то странной причине, если в веб -приложении в веб -приложении не выполняется никаких запросов, приложение получает «OperationalError: MySQL Server ушел».

В своей миссии отладки я посмотрел на Show ProcessList и увидел следующее:

39817253 | sqladmin | my_host | kb_dev   | Sleep   |  174 |

174 - это количество секунд, которое соединение от моего приложения было «спать». Он продолжает подсчитать, если приложение не делает другой запрос.

Похоже, что мое приложение удерживается в соединении с MySQL даже после того, как мой запрос закончился! И обычно есть только один процесс, независимо от того, сколько запросов я делаю с помощью своего приложения, одновременно или нет.

У меня вопрос, если это нормально, чтобы соединение "спала" так долго? Я почти уверен, что расширенный сон заставляет MySQL сократить соединение после определенного тайм -аута, которая, в свою очередь, вызывает ошибку «OperationalError: MySQL ушел».

Это было полезно?

Решение

Поведение по умолчанию SQLALCHEMY - это объединение соединений в двигателе:

http://www.sqlalchemy.org/docs/core/engines.html

http://www.sqlalchemy.org/docs/core/pooling.html

Что касается отключения на ночь, то это известное поведение MySQL, SQLalchemy предоставляет флаг Pool_Recycle для его оборудования. Вот много ссылок, которые описывают это:

http://www.sqlalchemy.org/docs/dialects/mysql.html#connection-imeouts

http://www.sqlalchemy.org/docs/core/pooling.html#setting-pool-recycle

http://www.sqlalchemy.org/docs/core/engines.html#sqlalchemy.create_engine (pool_recycle)

http://www.sqlalchemy.org/trac/wiki/faq#mysqlserverhasgoneaway

Пост в блоге всего несколько дней назад:

http://douglatornell.ca/blog/2012/01/08/staying-alive/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top