Skip to content

Instantly share code, notes, and snippets.

@iivvoo
Created September 14, 2011 15:30
Show Gist options
  • Save iivvoo/1216877 to your computer and use it in GitHub Desktop.
Save iivvoo/1216877 to your computer and use it in GitHub Desktop.
queue stress testing
from google.appengine.ext import webapp
from google.appengine.ext import db
from google.appengine.api.taskqueue import Task, Queue
from google.appengine.ext import deferred
import datetime
import random
def generate_random(l=8):
allowed = "abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789-"
rnd = "".join(random.choice(allowed) for i in range(l))
return rnd
class Entry(db.Model):
complete = db.BooleanProperty(default=False)
counter = db.IntegerProperty()
sent = db.DateTimeProperty()
received = db.DateTimeProperty()
value = db.StringProperty()
def deferred_task(counter):
value = generate_random(20)
e = Entry(sent=datetime.datetime.utcnow(), value=value, counter=counter, complete=False)
e.put()
unique = "task-%s" % generate_random(10)
t = Task(name=unique, url="/", method="POST", params=dict(value=value))
Queue("default").add(t)
return value
class QueueIssueHandler(webapp.RequestHandler):
def create_task(self, counter=5):
deferred.defer(deferred_task, counter)
def status(self):
r = self.response
incomplete = Entry.all().filter("complete =", False).count()
r.headers['Content-Type'] = 'text/plain'
r.out.write("Empty entries: %d" % incomplete)
def fire(self):
for i in range(0, 100):
self.create_task(3)
r = self.response
incomplete = Entry.all().filter("receiver =", None).count()
r.headers['Content-Type'] = 'text/plain'
r.out.write("Hello World: %d" % incomplete)
def get(self, page=None):
if page == "fire":
return self.fire()
elif page == "status":
return self.status()
r = self.response
r.headers['Content-Type'] = 'text/html'
r.out.write('<a href="/fire">fire</a> or <a href="/status">status</a>')
def post(self, page=None):
data = self.request.get('value', None)
if data:
e = Entry.all().filter("value =", data).get()
e.received = datetime.datetime.utcnow()
e.complete = True
e.put()
if e.counter:
self.create_task(e.counter-1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment