From c5de6f188dac491f114861648aafb30737da131f Mon Sep 17 00:00:00 2001 From: "Kali Kaneko (leap communications)" Date: Sun, 10 Apr 2016 18:42:27 -0400 Subject: move PoCs to its own subdir --- toys/Makefile | 20 ++++++++++++++++++++ toys/server.py | 17 +++++++++++++++++ toys/server2.py | 20 ++++++++++++++++++++ toys/server3.py | 42 ++++++++++++++++++++++++++++++++++++++++++ toys/tasks.py | 29 +++++++++++++++++++++++++++++ 5 files changed, 128 insertions(+) create mode 100644 toys/Makefile create mode 100644 toys/server.py create mode 100644 toys/server2.py create mode 100644 toys/server3.py create mode 100644 toys/tasks.py (limited to 'toys') diff --git a/toys/Makefile b/toys/Makefile new file mode 100644 index 0000000..33761a1 --- /dev/null +++ b/toys/Makefile @@ -0,0 +1,20 @@ +# Simple PoC toys + +perf: + httperf --server localhost --port 8080 --num-calls 200 --num-conns 20 --uri / + +perf-little: + httperf --server localhost --port 8080 --num-calls 5 --num-conns 20 --uri / + +perf-easy: + httperf --server localhost --port 8080 --num-calls 5 --num-conns 20 --uri /hi + +inline-server: + python server.py + +thread-server: + python server2.py + +ampoule-server: + python server3.py + diff --git a/toys/server.py b/toys/server.py new file mode 100644 index 0000000..4afa31b --- /dev/null +++ b/toys/server.py @@ -0,0 +1,17 @@ +import os +from klein import run, route +import tasks + +FIB = os.environ.get('FIB', tasks.FIB_DEFAULT) + + +@route('/') +def home(request): + return 'answer is >>> %s\n' % tasks.fib(FIB) + +@route('/hi') +def ping(request): + return 'easy!' + +if __name__ == "__main__": + run("localhost", 8080) diff --git a/toys/server2.py b/toys/server2.py new file mode 100644 index 0000000..268c7c5 --- /dev/null +++ b/toys/server2.py @@ -0,0 +1,20 @@ +import os +from klein import run, route +from twisted.internet.threads import deferToThread +import tasks + +FIB = os.environ.get('FIB', tasks.FIB_DEFAULT) + + +@route('/') +def home(request): + d = deferToThread(tasks.fib, FIB) + d.addCallback(lambda result: 'answer is >>> %s\n' % result) + return d + +@route('/hi') +def ping(request): + return 'easy!' + +if __name__ == "__main__": + run("localhost", 8080) diff --git a/toys/server3.py b/toys/server3.py new file mode 100644 index 0000000..d737d4b --- /dev/null +++ b/toys/server3.py @@ -0,0 +1,42 @@ +import os +import sys +from klein import run, route + +from twisted.internet import defer +from twisted.internet import reactor +from twisted.python import log + +from ampoule import pool + +import tasks + +log.startLogging(sys.stdout) + +FIB = os.environ.get('FIB', tasks.FIB_DEFAULT) + + +@route('/') +def home(request): + d = pp.doWork(tasks.Fib, n=int(FIB)) + d.addCallback(lambda res: 'answer is >>> {r}\n'.format(r=res['fib'])) + return d + +@route('/hi') +def ping(request): + return 'easy!' + + +pp = None + + +@defer.inlineCallbacks +def start_pool(): + global pp + # TODO get max number of processors + pp = pool.ProcessPool(tasks.FibCalculator, min=1, max=4) + print 'starting pool' + yield pp.start() + +if __name__ == "__main__": + reactor.callWhenRunning(start_pool) + run("localhost", 8080) diff --git a/toys/tasks.py b/toys/tasks.py new file mode 100644 index 0000000..3f8b85d --- /dev/null +++ b/toys/tasks.py @@ -0,0 +1,29 @@ +import os +from twisted.protocols import amp +from ampoule import child + +FIB_DEFAULT = 30 + + +def fib(n): + '''very silly fibonacci function. + do not try to optimize this, the idea is to make your cpu suffer for a + while''' + n = int(n) + if n <= 2: + return 1 + else: + return fib(n-1) + fib(n-2) + +# ampoule stuff + +class Fib(amp.Command): + arguments = [('n', amp.Integer())] + response = [('fib', amp.Integer())] + + +class FibCalculator(child.AMPChild): + @Fib.responder + def fib(self, n): + #print "FIB FUNCTION CALLED WITH", n + return {"fib": fib(n)} -- cgit v1.2.3