Run a script many times, compile it once.
DaemonConductor acts as drop-in replacement for a subset of julia.
~$ juliaclient --help
juliaclient [switches] -- [programfile] [args...]
Switches (a '*' marks the default value, if applicable):
-v, --version Display version information
-h, --help Print this message
--project[=<dir>|@.] Set <dir> as the home project/environment
-e, --eval <expr> Evaluate <expr>
-E, --print <expr> Evaluate <expr> and display the result
-L, --load <file> Load <file> immediately on all processors
-i Interactive mode; REPL runs and `isinteractive()` is true
--banner={yes|no|auto*} Enable or disable startup banner
--color={yes|no|auto*} Enable or disable color text
--history-file={yes*|no} Load or save history
Currently the client makes use of unix sockets and =io_uring=, and so only works on Linux systems at the moment.
- Install somewhere (potentially in a separate package environment)
- Run
using DaemonConductor; DaemonConductor.install() - Use
juliaclientas a (mostly) drop-in replacement forjulia
When the daemon starts, it pays attention to the following environmental variables:
JULIA_DAEMON_SERVER(default:/run/user/$UID/julia-daemon.sock), the socket the client connects to.JULIA_DAEMON_WORKER_ARGS(default:--startup-file=no), arguments passed to the worker Julia processes (individual arguments are split on whitespace).JULIA_DAEMON_WORKER_MAXCLIENTS(default:1), the maximum number of clients a worker may be attached to at once. Set to0to disable.JULIA_DAEMON_WORKER_EXECUTABLE(default:juliaonPATH), the path to the Julia executable used by the workers.JULIA_DAEMON_WORKER_TTL(default:7200, 2h), the number of seconds a worker should be kept alive for after the last client disconnects from it. This variable can be updated within the worker itself.
Similarly, the client pays attention to JULIA_DAEMON_SERVER to make sure it
connects to the right socket.
- A worker is started per-project, and so running the same thing in multiple projects will incur the worker startup and compile cost multiple times.
- Workers are currently kept alive forever, leading to ballooning memory usage. This should be addressed in the future.
- The REPL seems a little funky, and wasn’t designed to allow for multiple REPLs per Julia process.
- Sometimes the socket file disappears, for mysterious reasons.
- This is currently the result of a weekend of work, there are likely some minor issues that haven’t been shaken out yet.