Skip to content

Instantly share code, notes, and snippets.

@andrix
Created August 10, 2012 02:53
Show Gist options
  • Save andrix/3310581 to your computer and use it in GitHub Desktop.
Save andrix/3310581 to your computer and use it in GitHub Desktop.
perf script to test queue performance
import sys
import time
from collections import deque
N = 10000
class FifoMemoryQueue(object):
"""Memory FIFO queue."""
def __init__(self):
self.q = deque()
def push(self, obj):
self.q.appendleft(obj)
def pop(self):
if self.q:
return self.q.pop()
def close(self):
pass
def __len__(self):
return len(self.q)
class LifoMemoryQueue(FifoMemoryQueue):
"""Memory LIFO queue."""
def push(self, obj):
self.q.append(obj)
class NewFifoMemoryQueue(object):
"""Memory FIFO queue."""
def __init__(self):
self.q = deque()
self.push = self.q.append
def pop(self):
q = self.q
return q.popleft() if q else None
def close(self):
pass
def __len__(self):
return len(self.q)
class NewLifoMemoryQueue(NewFifoMemoryQueue):
"""Memory LIFO queue."""
def pop(self):
q = self.q
return q.pop() if q else None
def perf_queue_by_class(queue_class, n=N):
print "class : %s" % queue_class.__name__
q = queue_class()
t1 = time.time()
for _ in xrange(n):
q.push("xx object xx test")
print " push time: %s" % (time.time() - t1)
t1 = time.time()
for _ in xrange(n):
q.pop()
print " pop time: %s" % (time.time() - t1)
t1 = time.time()
for _ in xrange(n):
q.pop()
print " empty pop time: %s" % (time.time() - t1)
def main():
n = int(sys.argv[1]) if sys.argv[1:] else N
perf_queue_by_class(FifoMemoryQueue, n)
perf_queue_by_class(LifoMemoryQueue, n)
perf_queue_by_class(NewFifoMemoryQueue, n)
perf_queue_by_class(NewLifoMemoryQueue, n)
if __name__ == '__main__':
main()
"""
Results:
% python perf_queues.py 10000000
class : FifoMemoryQueue
push time: 2.70697999001
pop time: 2.92778491974
empty pop time: 1.98276090622
class : LifoMemoryQueue
push time: 2.7147758007
pop time: 2.98942518234
empty pop time: 1.80923390388
class : NewFifoMemoryQueue
push time: 0.750053882599
pop time: 2.96709609032
empty pop time: 1.99379086494
class : NewLifoMemoryQueue
push time: 0.768209934235
pop time: 2.88156580925
empty pop time: 1.88952207565
"""
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment