Skip to content

Instantly share code, notes, and snippets.

@methane
Created May 9, 2014 18:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save methane/7bb1dcada695d65ebbf1 to your computer and use it in GitHub Desktop.
Save methane/7bb1dcada695d65ebbf1 to your computer and use it in GitHub Desktop.
$ python sample.py
...........................................................................................................................................................................................................................................................ERROR:sqlalchemy.pool.QueuePool:Exception closing connection None
Traceback (most recent call last):
File "/Users/inada-n/venvs/flask-gevent-pymysql/lib/python2.7/site-packages/sqlalchemy/pool.py", line 244, in _close_connection
self._dialect.do_close(connection)
File "/Users/inada-n/venvs/flask-gevent-pymysql/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 411, in do_close
dbapi_connection.close()
AttributeError: 'NoneType' object has no attribute 'close'
Traceback (most recent call last):
File "/Users/inada-n/venvs/flask-gevent-pymysql/lib/python2.7/site-packages/gevent/greenlet.py", line 327, in run
result = self._run(*self.args, **self.kwargs)
File "sample.py", line 23, in worker
Session.remove()
File "/Users/inada-n/venvs/flask-gevent-pymysql/lib/python2.7/site-packages/sqlalchemy/orm/scoping.py", line 86, in remove
self.registry().close()
File "/Users/inada-n/venvs/flask-gevent-pymysql/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 999, in close
transaction.close()
File "/Users/inada-n/venvs/flask-gevent-pymysql/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 437, in close
connection.close()
File "/Users/inada-n/venvs/flask-gevent-pymysql/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 640, in close
del self.__connection
AttributeError: _Connection__connection
<Greenlet at 0x10e62acd0: worker> failed with AttributeError
.....................................................................................................................................................................................................
import gevent.monkey
gevent.monkey.patch_all()
import logging
logging.basicConfig()
import random
import sys
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
engine = create_engine('mysql+pymysql://root@localhost/test',
pool_size=2, max_overflow=100, pool_recycle=5)
Session = scoped_session(sessionmaker(bind=engine))
stop = False
def worker():
global stop
try:
while True:
Session.execute("SELECT 1+1")
gevent.sleep(random.random()*10)
Session.remove()
sys.stderr.write('.')
finally:
stop = True
def main():
for i in range(100):
gevent.spawn(worker)
gevent.sleep(10)
result = list(engine.execute("show processlist"))
engine.execute("kill %d" % result[-2][0])
while not stop:
gevent.sleep(1)
gevent.sleep(10)
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment