##// END OF EJS Templates
Fixed high CPU usage of XREQ channel....
Fixed high CPU usage of XREQ channel. Previously, the XReqSocketChannel was consuming nearly 100% CPU. This was caused by the ioloop polling for POLLIN|POLLOUT|POLLERR always. Now we are only polling for POLLOUT when there is a message waiting to be sent. This seems to have fixed the problem.

File last commit:

r2611:710f79b2
r2695:c04e6487
Show More
ktest.py
52 lines | 1.1 KiB | text/x-python | PythonLexer
from Queue import Queue, Empty
import time
from kernelmanager import KernelManager
xreq_addr = ('127.0.0.1',5575)
sub_addr = ('127.0.0.1', 5576)
rep_addr = ('127.0.0.1', 5577)
km = KernelManager(xreq_addr, sub_addr, rep_addr)
# xreq_channel = km.xreq_channel
sub_channel = km.sub_channel
# xreq_channel.start()
sub_channel.start()
print "Channels are started"
def printer(msg):
print
print msg
class CallHandler(object):
def __init__(self):
self.queue = Queue()
def __call__(self, handler, msg):
self.queue.put((handler, msg))
def handle(self):
try:
handler, msg = self.queue.get(block=False)
except Empty:
pass
else:
handler(msg)
call_handler = CallHandler()
sub_channel.override_call_handler(call_handler)
sub_channel.add_handler(printer, 'pyin')
sub_channel.add_handler(printer, 'pyout')
sub_channel.add_handler(printer, 'stdout')
sub_channel.add_handler(printer, 'stderr')
for i in range(100):
call_handler.handle()
time.sleep(1)
# xreq_channel.join()
sub_channel.join()