##// END OF EJS Templates
Merge pull request #4498 from takluyver/daemon-streamcapturer...
Merge pull request #4498 from takluyver/daemon-streamcapturer Daemon StreamCapturer The StreamCapturer should die if the main thread crashes. On Shiningpanda, a failure in another nose plugin has been causing the tests to hang, because the main thread exits, but the StreamCapturer thread is still alive. Under normal conditions, the thread will still be shut down cleanly - it will only die a messy death if the main thread does.

File last commit:

r13353:0ca701d5
r13524:b1976c99 merge
Show More
win32support.py
74 lines | 2.1 KiB | text/x-python | PythonLexer
MinRK
forward subprocess IO over zmq on Windows...
r3771 """Utility for forwarding file read events over a zmq socket.
MinRK
code updates per review of PR #454
r4021 This is necessary because select on Windows only supports sockets, not FDs.
MinRK
update recently changed modules with Authors in docstring
r4018
Authors:
* MinRK
"""
MinRK
forward subprocess IO over zmq on Windows...
r3771
#-----------------------------------------------------------------------------
# Copyright (C) 2011 The IPython Development Team
#
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
import uuid
import zmq
from threading import Thread
Thomas Kluyver
Replace references to unicode and basestring
r13353 from IPython.utils.py3compat import unicode_type
MinRK
forward subprocess IO over zmq on Windows...
r3771 #-----------------------------------------------------------------------------
# Code
#-----------------------------------------------------------------------------
class ForwarderThread(Thread):
def __init__(self, sock, fd):
Thread.__init__(self)
self.daemon=True
self.sock = sock
self.fd = fd
def run(self):
MinRK
code updates per review of PR #454
r4021 """Loop through lines in self.fd, and send them over self.sock."""
MinRK
forward subprocess IO over zmq on Windows...
r3771 line = self.fd.readline()
# allow for files opened in unicode mode
Thomas Kluyver
Replace references to unicode and basestring
r13353 if isinstance(line, unicode_type):
MinRK
forward subprocess IO over zmq on Windows...
r3771 send = self.sock.send_unicode
else:
send = self.sock.send
while line:
send(line)
line = self.fd.readline()
# line == '' means EOF
self.fd.close()
self.sock.close()
def forward_read_events(fd, context=None):
MinRK
code updates per review of PR #454
r4021 """Forward read events from an FD over a socket.
MinRK
forward subprocess IO over zmq on Windows...
r3771
This method wraps a file in a socket pair, so it can
be polled for read events by select (specifically zmq.eventloop.ioloop)
"""
if context is None:
context = zmq.Context.instance()
push = context.socket(zmq.PUSH)
push.setsockopt(zmq.LINGER, -1)
pull = context.socket(zmq.PULL)
addr='inproc://%s'%uuid.uuid4()
push.bind(addr)
pull.connect(addr)
forwarder = ForwarderThread(push, fd)
forwarder.start()
return pull
MinRK
code updates per review of PR #454
r4021 __all__ = ['forward_read_events']