[Checkins] SVN: Sandbox/J1m/replaylog/replaylog.py Added a file-based queue.

Jim Fulton jim at zope.com
Sun May 6 04:34:09 EDT 2007


Log message for revision 75514:
  Added a file-based queue.
  

Changed:
  U   Sandbox/J1m/replaylog/replaylog.py

-=-
Modified: Sandbox/J1m/replaylog/replaylog.py
===================================================================
--- Sandbox/J1m/replaylog/replaylog.py	2007-05-06 07:48:09 UTC (rev 75513)
+++ Sandbox/J1m/replaylog/replaylog.py	2007-05-06 08:34:08 UTC (rev 75514)
@@ -1,6 +1,7 @@
 # Replay a log file to load a test server
 
-import logging, re, sys, time, threading, traceback, httplib, pdb
+import logging, marshal, os, re, sys, tempfile
+import time, threading, traceback, httplib, pdb
 
 logger = logging.getLogger()
 logger.addHandler(logging.StreamHandler())
@@ -26,9 +27,7 @@
     Jul=7, Aug=8, Sep=9, Oct=10, Nov=11, Dec=12,
     )
 
-queue = []
-
-def read(args=None):
+def read(append, args=None):
     if args is None:
         args = sys.argv[1:]
 
@@ -55,7 +54,7 @@
                 url = '%20'.join(url)
                 if method == 'GET':
                     get += 1
-                queue.append((t, url))
+                append((t, url))
 
                 good += 1
             except:
@@ -66,7 +65,7 @@
                 
     print good, bad, get
 
-def process_queue(server):
+def process_queue(server, queue):
     results = {}
     while 1:
         try:
@@ -90,26 +89,43 @@
     print results
             
 
+class Queue:
+
+    def __init__(self, f):
+        self.f = f
+        f.seek(0)
+        self.lock = threading.Lock()
+
+    def pop(self):
+        self.lock.aquire()
+        try:
+            try:
+                return marshal.load(self.f)
+            except EOFError:
+                raise IndexError
+        finally:
+            self.lock.release()
         
-
 def main():
-    global queue
-    queue = []
-
     args = sys.argv[1:]
     server = args.pop(0)
 
-    read(args)
-    queue.reverse()
+    f = TemporaryFile()
+
+    read((lambda v: marshal.dump(v, f)), args)
+
     threads = []
-##    process_queue()
+    queue = Queue(f)
+
     for i in range(50):
-        thread = threading.Thread(target=process_queue, args=(server,))
+        thread = threading.Thread(target=process_queue, args=(server, queue))
         thread.start()
         threads.append(thread)
 
     for thread in threads:
         thread.join()
+
+
             
 if __name__ == '__main__':
     main()



More information about the Checkins mailing list