]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- stress test for invalidation
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 10 May 2014 19:52:31 +0000 (15:52 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 10 May 2014 19:52:31 +0000 (15:52 -0400)
test/perf/invalidate_stresstest.py [new file with mode: 0644]

diff --git a/test/perf/invalidate_stresstest.py b/test/perf/invalidate_stresstest.py
new file mode 100644 (file)
index 0000000..51bd366
--- /dev/null
@@ -0,0 +1,51 @@
+import gevent.monkey
+gevent.monkey.patch_all()
+
+import logging
+logging.basicConfig()
+#logging.getLogger("sqlalchemy.pool").setLevel(logging.INFO)
+from sqlalchemy import event
+import random
+import sys
+from sqlalchemy import create_engine
+import traceback
+
+engine = create_engine('mysql+pymysql://scott:tiger@localhost/test',
+                       pool_size=50, max_overflow=0)
+
+@event.listens_for(engine, "connect")
+def conn(*arg):
+    print "new connection!"
+
+def worker():
+    while True:
+        conn = engine.connect()
+        try:
+            trans = conn.begin()
+            for i in range(5):
+                conn.execute("SELECT 1+1")
+                gevent.sleep(random.random() * 1.01)
+
+        except:
+            #traceback.print_exc()
+            sys.stderr.write('X')
+        else:
+            conn.close()
+            sys.stderr.write('.')
+
+
+def main():
+    for i in range(40):
+        gevent.spawn(worker)
+
+    gevent.sleep(3)
+
+    while True:
+        result = list(engine.execute("show processlist"))
+        engine.execute("kill %d" % result[-2][0])
+        print "\n\n\n BOOM!!!!! \n\n\n"
+        gevent.sleep(5)
+        print(engine.pool.status())
+
+
+main()