Scroll to navigation



ipcontroller - starts an IPython cluster controller


Start the IPython controller for parallel computing.

The IPython controller provides a gateway between the IPython engines and clients. The controller needs to be started before the engines and can be configured using command line options or using a cluster directory. Cluster directories contain config, log and security files and are usually located in your ipython directory and named as "profile_name". See the `profile` and `profile-dir` options for details.

Options -------

Arguments that take values are actually convenience aliases to full Configurables, whose aliases are listed on the help line. For more information on full configurables, see '--help-all'.


send log output to a file


set log level to logging.DEBUG (maximize logging output)


set log level to logging.CRITICAL (minimize logging output)


Initialize profile with default config files.
This is equivalent
to running `ipython profile create <profile>` prior to startup.


Use threads instead of processes for the schedulers


use the SQLiteDB backend


use the MongoDB backend


use the in-memory DictDB backend


use dummy DB backend, which doesn't store any information.
This is the default as of IPython 0.13.
To enable delayed or repeated retrieval of results from the Hub, select one of the true db backends.


reuse existing json connection files


Attempt to restore engines from a JSON file.
For use when resuming a crashed controller


Use HMAC digests for authentication of messages. Setting this flag will generate a new UUID to use as the HMAC key.


Don't authenticate messages.

--ssh=<Unicode> (IPControllerApp.ssh_server)

Default: '' ssh url for clients to use when connecting to the Controller processes. It should be of the form: [user@]server[:port]. The Controller's listening addresses must be accessible from the ssh server

--enginessh=<Unicode> (IPControllerApp.engine_ssh_server)

Default: '' ssh url for engines to use when connecting to the Controller processes. It should be of the form: [user@]server[:port]. The Controller's listening addresses must be accessible from the ssh server

--location=<Unicode> (IPControllerApp.location)

Default: 'pesto' The external IP or domain name of the Controller, used for disambiguating engine and client connections.

--url=<Unicode> (HubFactory.url)

Default: '' The 0MQ url used for registration. This sets transport, ip, and port in one variable. For example: url='tcp://' or url='epgm://*:90210'

--ip=<Unicode> (HubFactory.ip)

Default: '' The IP address for registration. This is generally either '' for loopback only or '*' for all interfaces.

--transport=<Unicode> (HubFactory.transport)

Default: 'tcp' The 0MQ transport for communications. This will likely be the default of 'tcp', but other values include 'ipc', 'epgm', 'inproc'.

--port=<Int> (HubFactory.regport)

Default: 0 The port on which the Hub listens for registration.

--ping=<Int> (HeartMonitor.period)

Default: 3000 The frequency at which the Hub pings the engines for heartbeats (in ms)

--scheme=<Enum> (TaskScheduler.scheme_name)

Default: 'leastload' Choices: ('leastload', 'pure', 'lru', 'plainrandom', 'weighted', 'twobin') select the task scheduler scheme [default: Python LRU] Options are: 'pure', 'lru', 'plainrandom', 'weighted', 'twobin','leastload'

--hwm=<Int> (TaskScheduler.hwm)

Default: 1 specify the High Water Mark (HWM) for the downstream socket in the Task scheduler. This is the maximum number of allowed outstanding tasks on each engine. The default (1) means that only one task can be outstanding on each engine. Setting TaskScheduler.hwm=0 means there is no limit, and the engines continue to be assigned tasks while they are working, effectively hiding network latency behind computation, but can result in an imbalance of work when submitting many heterogenous tasks all at once. Any positive value greater than one is a compromise between the two.

--profile-dir=<Unicode> (ProfileDir.location)

Default: '' Set the profile location directly. This overrides the logic used by the `profile` option.

--profile=<Unicode> (BaseIPythonApplication.profile)

Default: 'default' The IPython profile to use.

--ipython-dir=<Unicode> (BaseIPythonApplication.ipython_dir)

Default: '' The name of the IPython directory. This directory is used for logging configuration (through profiles), history storage, etc. The default is usually $HOME/.ipython. This option can also be specified through the environment variable IPYTHONDIR.

--log-level=<Enum> (Application.log_level)

Default: 30 Choices: (0, 10, 20, 30, 40, 50, 'DEBUG', 'INFO', 'WARN', 'ERROR', 'CRITICAL') Set the log level by value or name.

--config=<Unicode> (BaseIPythonApplication.extra_config_file)

Default: '' Path to an extra config file to load. If specified, load this config file in addition to any other IPython config.

--work-dir=<Unicode> (BaseParallelApplication.work_dir)

Default: '/home/joe' Set the working dir for the process.

--log-to-file=<Bool> (BaseParallelApplication.log_to_file)

Default: False whether to log to a file

--clean-logs=<Bool> (BaseParallelApplication.clean_logs)

Default: False whether to cleanup old logfiles before starting

--log-url=<Unicode> (BaseParallelApplication.log_url)

Default: '' The ZMQ URL of the iplogger to aggregate logging.

--cluster-id=<Unicode> (BaseParallelApplication.cluster_id)

Default: '' String id to add to runtime files, to prevent name collisions when using multiple clusters with a single profile simultaneously. When set, files will be named like: 'ipcontroller-<cluster_id>-engine.json' Since this is text inserted into filenames, typical recommendations apply: Simple character strings are ideal, and spaces are not recommended (but should generally work).

--ident=<CUnicode> (Session.session)

Default: '' The UUID identifying this session.

--user=<Unicode> (Session.username)

Default: 'joe' Username for the Session. Default is your system username.

--keyfile=<Unicode> (Session.keyfile)

Default: '' path to file containing execution key.

To see all available configurables, use --help-all.


ipcontroller --ip= --port=1000
# listen on ip, port for engines
ipcontroller --scheme=pure
# use the pure zeromq scheduler
September 2020 ipyparallel 6.2.4