Skip to content

Instantly share code, notes, and snippets.

@dangra
Forked from andrix/perf_queues.py
Created August 10, 2012 12:55
Show Gist options
  • Save dangra/3313989 to your computer and use it in GitHub Desktop.
Save dangra/3313989 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):
if self.q:
return self.q.popleft()
def close(self):
pass
def __len__(self):
return len(self.q)
class NewLifoMemoryQueue(NewFifoMemoryQueue):
"""Memory LIFO queue."""
def pop(self):
if self.q:
self.q.pop()
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
class : FifoMemoryQueue
push time: 0.587100028992
pop time: 0.636463165283
empty pop time: 0.410062789917
class : LifoMemoryQueue
push time: 0.558413982391
pop time: 0.630535125732
empty pop time: 0.40954709053
class : NewFifoMemoryQueue
push time: 0.171546936035
pop time: 0.64853978157
empty pop time: 0.420575141907
class : NewLifoMemoryQueue
push time: 0.172080993652
pop time: 0.657664060593
empty pop time: 0.412140846252
"""
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment