|
|
"""The IPython ZMQ-based parallel computing interface."""
|
|
|
|
|
|
# Copyright (c) IPython Development Team.
|
|
|
# Distributed under the terms of the Modified BSD License.
|
|
|
|
|
|
|
|
|
import os
|
|
|
import warnings
|
|
|
|
|
|
import zmq
|
|
|
|
|
|
from IPython.config.configurable import MultipleInstanceError
|
|
|
|
|
|
from IPython.utils.pickleutil import Reference
|
|
|
|
|
|
from .client.asyncresult import *
|
|
|
from .client.client import Client
|
|
|
from .client.remotefunction import *
|
|
|
from .client.view import *
|
|
|
from .controller.dependency import *
|
|
|
from .error import *
|
|
|
from .util import interactive
|
|
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
# Functions
|
|
|
#-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
def bind_kernel(**kwargs):
|
|
|
"""Bind an Engine's Kernel to be used as a full IPython kernel.
|
|
|
|
|
|
This allows a running Engine to be used simultaneously as a full IPython kernel
|
|
|
with the QtConsole or other frontends.
|
|
|
|
|
|
This function returns immediately.
|
|
|
"""
|
|
|
from IPython.kernel.zmq.kernelapp import IPKernelApp
|
|
|
from ipython_parallel.apps.ipengineapp import IPEngineApp
|
|
|
|
|
|
# first check for IPKernelApp, in which case this should be a no-op
|
|
|
# because there is already a bound kernel
|
|
|
if IPKernelApp.initialized() and isinstance(IPKernelApp._instance, IPKernelApp):
|
|
|
return
|
|
|
|
|
|
if IPEngineApp.initialized():
|
|
|
try:
|
|
|
app = IPEngineApp.instance()
|
|
|
except MultipleInstanceError:
|
|
|
pass
|
|
|
else:
|
|
|
return app.bind_kernel(**kwargs)
|
|
|
|
|
|
raise RuntimeError("bind_kernel be called from an IPEngineApp instance")
|
|
|
|
|
|
|
|
|
|
|
|
|