Skip to content

Commit

Permalink
Add support for specifying extra switches in julia kernel launch
Browse files Browse the repository at this point in the history
Re spine-tools/Spine-Toolbox#1225

This is basically so we can set the sysimage for the kernel.
  • Loading branch information
Manuel Marin committed Feb 13, 2021
1 parent e0da4a5 commit 67c638f
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 5 deletions.
40 changes: 36 additions & 4 deletions spine_engine/execution_managers.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,9 +109,12 @@ def _make_kernel_manager(self, kernel_name, group_id):
if group_id is None:
# Execute in isolation
return KernelManager(kernel_name=kernel_name)
return self._kernel_managers.setdefault((kernel_name, group_id), KernelManager(kernel_name=kernel_name))
key = (kernel_name, group_id)
if key not in self._kernel_managers:
self._kernel_managers[key] = KernelManager(kernel_name=kernel_name)
return self._kernel_managers[key]

def new_kernel_manager(self, language, kernel_name, group_id, logger, **kwargs):
def new_kernel_manager(self, language, kernel_name, group_id, logger, extra_switches=None, **kwargs):
"""Creates a new kernel manager for given kernel and group id if none exists.
Starts the kernel if not started, and returns it.
Expand All @@ -120,6 +123,8 @@ def new_kernel_manager(self, language, kernel_name, group_id, logger, **kwargs):
kernel_name (str): the kernel
group_id (str): item group that will execute using this kernel
logger (LoggerInterface): for logging
extra_switches (list, optional): List of additional switches to launch julia.
These come before the 'programfile'.
`**kwargs`: optional. Keyword arguments passed to ``KernelManager.start_kernel()``
Returns:
Expand All @@ -132,6 +137,9 @@ def new_kernel_manager(self, language, kernel_name, group_id, logger, **kwargs):
msg = dict(type="kernel_spec_not_found", **msg_head)
logger.msg_kernel_execution.emit(msg)
return None
if extra_switches:
# Insert switches right after the julia program
km.kernel_spec.argv[1:1] = extra_switches
blackhole = open(os.devnull, 'w')
km.start_kernel(stdout=blackhole, stderr=blackhole, **kwargs)
msg = dict(type="kernel_started", connection_file=km.connection_file, **msg_head)
Expand Down Expand Up @@ -159,14 +167,38 @@ def get_kernel_manager(connection_file):


class KernelExecutionManager(ExecutionManagerBase):
def __init__(self, logger, language, kernel_name, *commands, group_id=None, workdir=None, startup_timeout=60):
def __init__(
self,
logger,
language,
kernel_name,
*commands,
group_id=None,
workdir=None,
startup_timeout=60,
extra_switches=None,
**kwargs
):
"""
Args:
logger (LoggerInterface)
language (str): The underlying language, mainly for logging purposes.
kernel_name (str): the kernel
*commands: Commands to execute in the kernel
group_id (str, optional): item group that will execute using this kernel
workdir (str, optional): item group that will execute using this kernel
startup_timeout (int, optional): How much to wait for the kernel, used in ``KernelClient.wait_for_ready()``
extra_switches (list, optional): List of additional switches to launch julia.
These come before the 'programfile'.
**kwargs (optional): Keyword arguments passed to ``KernelManager.start_kernel()``
"""
super().__init__(logger)
self._msg_head = dict(language=language, kernel_name=kernel_name)
self._commands = commands
self._group_id = group_id
self._workdir = workdir
self._kernel_manager = _kernel_manager_factory.new_kernel_manager(
language, kernel_name, group_id, logger, cwd=self._workdir
language, kernel_name, group_id, logger, cwd=self._workdir, extra_switches=extra_switches, **kwargs
)
self._kernel_client = self._kernel_manager.client() if self._kernel_manager is not None else None
self._startup_timeout = startup_timeout
Expand Down
2 changes: 1 addition & 1 deletion spine_engine/version.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@
# this program. If not, see <http://www.gnu.org/licenses/>.
######################################################################################################################

__version__ = "0.9.16"
__version__ = "0.9.17"

0 comments on commit 67c638f

Please sign in to comment.