module-launcher

Preforks interpreters to reduce script startup time


Keywords
module, launcher, speedup, prefork
License
BSD-3-Clause
Install
pip install module-launcher==0.2.0

Documentation

Python module launcher

This module tries to improve the start-up time of Python scripts. It does so by doing two things:

  • Eliminating the time it takes to spawn a new Python process.
  • Loading modules ahead of time.

Eliminating interpreter start-up time is done by maintaining a pool of Python processes. Reducing module load times is done by importing modules immediately after a worker is spawned. Python is smart about not re-importing modules that are already in sys.modules.

I ended up writing this module because of a few small Qt programs that weren't launching as fast as I would like them too. The results were a ~100ms reduction in startup time, which can be attributed to PySide being a hefty package to import.

There are plenty of bugs and todos left - handling return code and proper process shutdown seem to be on top of the list.

Usage

Usage: python-module-launcher-3.3 [-hvdpws] socket [mod, ...]

Options:
  -h, --help           show this help message and exit
  -v, --version        show version and exit
  -d, --daemonize      run in background (default: no)
  -p, --pidfile        pid file to use if running as a daemon
  -w, --workers <num>  worker processes to start (default: 5)
  -s, --spare <num>    spare worker processes to maintain (default: 3)

Arguments:
  socket               path to AF_UNIX socket
  mod*                 modules to pre-import in workers

Examples:
  python-module-launcher-3.3 launcher.sock numpy PySide.QtCore

  echo -n "module path.to.module" | nc -U launcher.sock
  echo -n "file path/to/script.py arg1 arg2 | nc -U launcher.sock
  echo -n  "entrypoint name==0.1.0 console_scripts name arg1 arg2"

You can send the following commands to the unix socket:

file path/to/script.py arg1 arg2 ...
module path.to.module arg1 arg2 ...
entrypoint name==0.1.0 console_scripts name arg1 arg2 ...

License

This module is released under the terms of the `Revised BSD License`_.