[Zope-Checkins] SVN: Zope/trunk/lib/python/Products/Sessions/stresstests/stresstestMultiThread.py Make output a little more informative and emulate Zope better by opening

Chris McDonough chrism at plope.com
Sat May 15 21:34:23 EDT 2004


Log message for revision 24730:
Make output a little more informative and emulate Zope better by opening
and closing a connection between each request.



-=-
Modified: Zope/trunk/lib/python/Products/Sessions/stresstests/stresstestMultiThread.py
===================================================================
--- Zope/trunk/lib/python/Products/Sessions/stresstests/stresstestMultiThread.py	2004-05-15 21:57:44 UTC (rev 24729)
+++ Zope/trunk/lib/python/Products/Sessions/stresstests/stresstestMultiThread.py	2004-05-16 01:34:22 UTC (rev 24730)
@@ -116,10 +116,10 @@
     def go(self, token):
         readers = []
         writers = []
+        valuers = []
         readiters = 3
         writeiters = 3
-        readout = []
-        writeout = []
+        valueiters = 3
         numreaders = 2
         numwriters = 4
         numvaluers = 1
@@ -128,8 +128,8 @@
             thread = ReaderThread(db, readiters, token)
             readers.append(thread)
         for i in range(numvaluers):
-            thread = ValuesGetterThread(db, readiters, token)
-            readers.append(thread)
+            thread = ValuesGetterThread(db, valueiters, token)
+            valuers.append(thread)
         for i in range(numwriters):
             thread = WriterThread(db, writeiters, token)
             writers.append(thread)
@@ -139,32 +139,52 @@
         for thread in writers:
             thread.start()
             time.sleep(0.1)
+        for thread in valuers:
+            thread.start()
+            time.sleep(0.1)
         active = threading.activeCount()
-        while active > 1:
-            active = threading.activeCount()
+        while active > 0:
+            active = threading.activeCount()-1
             print 'waiting for %s threads' % active
+            print "readers: ", numActive(readers),
+            print "writers: ", numActive(writers),
+            print "valuers: ", numActive(valuers)
             time.sleep(5)
 
+def numActive(threads):
+    i = 0
+    for thread in threads:
+        if not thread.isFinished():
+            i+=1
+    return i
+
 class BaseReaderWriter(threading.Thread):
     def __init__(self, db, iters, token=None):
-        self.conn = db.open()
-        self.app = self.conn.root()['Application']
-        self.app = makerequest.makerequest(self.app)
-        if token is None:
-            token = getNewBrowserId()
-        self.app.REQUEST.browser_id_ = token
         self.iters = iters
         self.sdm_name = sdm_name
+        self.finished = 0
+        self.db = db
+        self.token = token
         threading.Thread.__init__(self)
 
     def run(self):
         i = 0
         try:
             while 1:
+                self.conn = self.db.open()
+                self.app = self.conn.root()['Application']
+                self.app = makerequest.makerequest(self.app)
+                if self.token is None:
+                    token = getNewBrowserId()
+                else:
+                    token = self.token
+                    self.app.REQUEST.browser_id_ = token
+
                 try:
                     self.run1()
                     return
                 except ReadConflictError:
+                    #traceback.print_exc()
                     print "R",
                 except BTreesConflictError:
                     print "B",
@@ -178,13 +198,19 @@
                 
                 i = i + 1
                 get_transaction().abort()
-                self.conn.sync()
-                time.sleep(random.randrange(5) * .1)
+                self.conn.close()
+                time.sleep(random.randrange(10) * .1)
         finally:
+            get_transaction().abort()
             self.conn.close()
             del self.app
+            self.finished = 1
             print '%s finished' % self.__class__
 
+    def isFinished(self):
+        return self.finished
+        
+
 class ReaderThread(BaseReaderWriter):
     def run1(self):
         session_data_manager = getattr(self.app, self.sdm_name)




More information about the Zope-Checkins mailing list