Skip to content

Instantly share code, notes, and snippets.

@prologic
Created May 27, 2015 15:39
Show Gist options
  • Save prologic/fea809047ba61847ebb5 to your computer and use it in GitHub Desktop.
Save prologic/fea809047ba61847ebb5 to your computer and use it in GitHub Desktop.
Benchmarking circuits.node
#!/usr/bin/env python
from __future__ import print_function
import sys
from circuits.node import Node, remote
from circuits import Component, Event, Timer
DELAY = 10 # 10ms
DATA = b"\x00" * 160
class ping(Event):
"""ping Event"""
class finished(Event):
"""finished Event"""
class terminate(Event):
"""terminate Event"""
class Child(Component):
def init(self, port):
self.port = port
self.received = 0
Node(port).register(self)
def ping(self, data):
self.received += len(data)
def finished(self):
print("Received: {0:d} {1:d}/s".format(self.received, self.received / 5))
self.stop()
class App(Component):
def init(self, port, delay=10):
self.child = Child(port)
self.child.start(process=True)
self.delay = delay / 1000.0
self.sent = 0
self.done = False
self.node = Node().register(self)
self.node.add("child", "127.0.0.1", port)
Timer(5, finished()).register(self)
def finished(self):
self.done = True
self.fire(remote(finished(), "child"))
print("Sent: {0:d} {1:d}/s".format(self.sent, self.sent / 5))
Timer(1, terminate()).register(self)
def terminate(self):
self.child.stop()
raise SystemExit(0)
def generate_events(self, event):
if self.done:
return
self.sent += len(DATA)
self.fire(remote(ping(DATA), "child"))
event.reduce_time_left(self.delay)
App(*map(int, sys.argv[1:])).run()
@prologic
Copy link
Author

$ ./test_node.py 9999 10
Sent: 2885920 577184/s
Received: 2885920 577184/s

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment