client.py
88 lines
| 2.5 KiB
| text/x-python
|
PythonLexer
Brian Granger
|
r2306 | #!/usr/bin/env python | ||
Brian E Granger
|
r1234 | # encoding: utf-8 | ||
"""This module contains blocking clients for the controller interfaces. | ||||
Unlike the clients in `asyncclient.py`, the clients in this module are fully | ||||
blocking. This means that methods on the clients return the actual results | ||||
rather than a deferred to the result. Also, we manage the Twisted reactor | ||||
for you. This is done by running the reactor in a thread. | ||||
The main classes in this module are: | ||||
* MultiEngineClient | ||||
* TaskClient | ||||
* Task | ||||
* CompositeError | ||||
""" | ||||
Brian Granger
|
r2306 | #----------------------------------------------------------------------------- | ||
# Copyright (C) 2008-2009 The IPython Development Team | ||||
Brian E Granger
|
r1234 | # | ||
# Distributed under the terms of the BSD License. The full license is in | ||||
# the file COPYING, distributed as part of this software. | ||||
Brian Granger
|
r2306 | #----------------------------------------------------------------------------- | ||
Brian E Granger
|
r1234 | |||
Brian Granger
|
r2306 | #----------------------------------------------------------------------------- | ||
Brian E Granger
|
r1234 | # Imports | ||
Brian Granger
|
r2306 | #----------------------------------------------------------------------------- | ||
Brian E Granger
|
r1234 | |||
Brian Granger
|
r2306 | from cStringIO import StringIO | ||
Brian E Granger
|
r1234 | import sys | ||
Brian Granger
|
r2306 | import warnings | ||
Brian E Granger
|
r1234 | |||
Brian Granger
|
r2058 | # from IPython.utils import growl | ||
Brian E Granger
|
r1234 | # growl.start("IPython1 Client") | ||
from twisted.internet import reactor | ||||
Brian Granger
|
r2306 | from twisted.internet.error import PotentialZombieWarning | ||
from twisted.python import log | ||||
from IPython.kernel.clientconnector import ClientConnector, Cluster | ||||
Brian E Granger
|
r1234 | from IPython.kernel.twistedutil import ReactorInThread | ||
from IPython.kernel.twistedutil import blockingCallFromThread | ||||
# These enable various things | ||||
from IPython.kernel import codeutil | ||||
Brian Granger
|
r2294 | # import IPython.kernel.magic | ||
Brian E Granger
|
r1234 | |||
# Other things that the user will need | ||||
Brian E Granger
|
r1395 | from IPython.kernel.task import MapTask, StringTask | ||
Brian E Granger
|
r1234 | from IPython.kernel.error import CompositeError | ||
#------------------------------------------------------------------------------- | ||||
# Code | ||||
#------------------------------------------------------------------------------- | ||||
Brian Granger
|
r2306 | warnings.simplefilter('ignore', PotentialZombieWarning) | ||
Brian E Granger
|
r1234 | |||
Brian Granger
|
r2306 | _client_tub = ClientConnector() | ||
Brian E Granger
|
r1234 | |||
Brian Granger
|
r2306 | get_multiengine_client = _client_tub.get_multiengine_client | ||
get_task_client = _client_tub.get_task_client | ||||
Brian E Granger
|
r1234 | MultiEngineClient = get_multiengine_client | ||
TaskClient = get_task_client | ||||
Brian Granger
|
r2308 | # This isn't great. I should probably set this up in the ReactorInThread | ||
# class below. But, it does work for now. | ||||
Brian Granger
|
r2306 | log.startLogging(sys.stdout, setStdout=0) | ||
Brian E Granger
|
r1234 | |||
# Now we start the reactor in a thread | ||||
rit = ReactorInThread() | ||||
rit.setDaemon(True) | ||||
Brian Granger
|
r2306 | rit.start() | ||
__all__ = [ | ||||
'MapTask', | ||||
'StringTask', | ||||
'MultiEngineClient', | ||||
'TaskClient', | ||||
'CompositeError', | ||||
'get_task_client', | ||||
'get_multiengine_client', | ||||
'Cluster' | ||||
] | ||||