pool_recycle applies to when the connection is checked in, and then you check 
it out.  if the connection is older than N seconds, it gets recycled out before 
being returned.

on the other hand, if you check out a connection and just hold onto it for 
hours, it’ll time out.

other than that there’s not enough information to go on here.


On Jan 12, 2014, at 9:33 PM, Ni Wesley <[email protected]> wrote:

> Hi all,
>   I hit a problem when use sqlalchemy with mysql.
> I found the problem is mysql's auto close to nonactive connection over 8 
> hours.
> 
> And , I googled a lot and find pool_recycle option for create_engine.
> But seems does not work.
> 
> Here is my code:
> engine = create_engine(db_url, echo=engine_echo,pool_recycle=30)
> session = scoped_session(sessionmaker(bind=engine))
> 
> And in mysql, I set wait_timeout to 60 secs for testing.
> 
> After this, I still got exception here:
> 2014-01-12 22:32:45,325 INFO sqlalchemy.engine.base.Engine SELECT device.id 
> AS device_id, device.devicetoken AS device_devicetoken 
> FROM device 
> WHERE device.devicetoken = %s 
>  LIMIT %s
> INFO:sqlalchemy.engine.base.Engine:SELECT device.id AS device_id, 
> device.devicetoken AS device_devicetoken 
> FROM device 
> WHERE device.devicetoken = %s 
>  LIMIT %s
> 2014-01-12 22:32:45,326 INFO sqlalchemy.engine.base.Engine ('323', 1)
> INFO:sqlalchemy.engine.base.Engine:('323', 1)
> ERROR:tornado.application:Uncaught exception, closing connection.
> Traceback (most recent call last):
>   File "/usr/lib/python2.6/site-packages/tornado/iostream.py", line 341, in 
> wrapper
>     callback(*args)
>   File "/usr/lib/python2.6/site-packages/tornado/stack_context.py", line 331, 
> in wrapped
>     raise_exc_info(exc)
>   File "/usr/lib/python2.6/site-packages/tornado/stack_context.py", line 302, 
> in wrapped
>     ret = fn(*args, **kwargs)
>   File "deviceserver.py", line 182, in send_message
>     tmp_usr = 
> session.query(Device).filter_by(devicetoken=self._devicetoken).first()
>   File 
> "/usr/lib/python2.6/site-packages/SQLAlchemy-0.8.3-py2.6-linux-x86_64.egg/sqlalchemy/orm/query.py",
>  line 2282, in first
>     ret = list(self[0:1])
>   File 
> "/usr/lib/python2.6/site-packages/SQLAlchemy-0.8.3-py2.6-linux-x86_64.egg/sqlalchemy/orm/query.py",
>  line 2149, in __getitem__
>     return list(res)
>   File 
> "/usr/lib/python2.6/site-packages/SQLAlchemy-0.8.3-py2.6-linux-x86_64.egg/sqlalchemy/orm/query.py",
>  line 2353, in __iter__
>     return self._execute_and_instances(context)
>   File 
> "/usr/lib/python2.6/site-packages/SQLAlchemy-0.8.3-py2.6-linux-x86_64.egg/sqlalchemy/orm/query.py",
>  line 2368, in _execute_and_instances
>     result = conn.execute(querycontext.statement, self._params)
>   File 
> "/usr/lib/python2.6/site-packages/SQLAlchemy-0.8.3-py2.6-linux-x86_64.egg/sqlalchemy/engine/base.py",
>  line 662, in execute
>     params)
>   File 
> "/usr/lib/python2.6/site-packages/SQLAlchemy-0.8.3-py2.6-linux-x86_64.egg/sqlalchemy/engine/base.py",
>  line 761, in _execute_clauseelement
>     compiled_sql, distilled_params
>   File 
> "/usr/lib/python2.6/site-packages/SQLAlchemy-0.8.3-py2.6-linux-x86_64.egg/sqlalchemy/engine/base.py",
>  line 874, in _execute_context
>     context)
>   File 
> "/usr/lib/python2.6/site-packages/SQLAlchemy-0.8.3-py2.6-linux-x86_64.egg/sqlalchemy/engine/base.py",
>  line 1024, in _handle_dbapi_exception
>     exc_info
>   File 
> "/usr/lib/python2.6/site-packages/SQLAlchemy-0.8.3-py2.6-linux-x86_64.egg/sqlalchemy/util/compat.py",
>  line 196, in raise_from_cause
>     reraise(type(exception), exception, tb=exc_tb)
>   File 
> "/usr/lib/python2.6/site-packages/SQLAlchemy-0.8.3-py2.6-linux-x86_64.egg/sqlalchemy/engine/base.py",
>  line 867, in _execute_context
>     context)
>   File 
> "/usr/lib/python2.6/site-packages/SQLAlchemy-0.8.3-py2.6-linux-x86_64.egg/sqlalchemy/engine/default.py",
>  line 324, in do_execute
>     cursor.execute(statement, parameters)
>   File "/usr/lib64/python2.6/site-packages/MySQLdb/cursors.py", line 201, in 
> execute
>     self.errorhandler(self, exc, value)
>   File "/usr/lib64/python2.6/site-packages/MySQLdb/connections.py", line 36, 
> in defaulterrorhandler
>     raise errorclass, errorvalue
> OperationalError: (OperationalError) (2006, 'MySQL server has gone away') 
> 'SELECT device.id AS device_id, device.devicetoken AS device_devicetoken 
> \nFROM device \nWHERE device.devicetoken = %s \n LIMIT %s' ('323', 1)
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/groups/opt_out.

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

Reply via email to