Don't like ads? PRO users don't see any ads ;-)
Guest

DynamoDB increment load test

By: jtlebigot on Jul 24th, 2012  |  syntax: Python  |  size: 1.17 KB  |  hits: 35  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. import threading
  2. import sys
  3. import time
  4. import boto
  5.  
  6. worker = 15
  7. units = 5
  8. incr = 100000
  9. itemid = 12
  10. tableName = 'jttest-load-inc'
  11.  
  12. # Atomic counter :)
  13. s = threading.Semaphore(0)
  14.  
  15. def createTable():
  16.     db =  boto.connect_dynamodb()
  17.     scheme = db.create_schema('key', int)
  18.     table = db.create_table(tableName, scheme, 1000, 1000)
  19.     table.refresh(wait_for_active=wait_for_active)
  20.  
  21. class ThreadClass(threading.Thread):
  22.     def __init__ (self, target):
  23.         threading.Thread.__init__(self)
  24.         self.target = target
  25.  
  26.     def run(self):
  27.         #Each thread needs its own // connexion as HTTP in python is not thread safe
  28.         db =  boto.connect_dynamodb()
  29.         table = db.get_table(tableName)
  30.         item = table.new_item(self.target)
  31.  
  32.         for i in range(incr/worker):
  33.             item.add_attribute('inc', 1)
  34.             item.save();
  35.             s.release()
  36.  
  37. def stressTest():
  38.     for i in range(worker):
  39.         t = ThreadClass(10+i%units)
  40.         t.start()
  41.  
  42.     while threading.activeCount() > 1:
  43.         sys.stdout.write("Done {:4}/\r".format(s._Semaphore__value, incr))
  44.         time.sleep(1)
  45.  
  46.  
  47. #createTable()
  48. stressTest()