Make Python apps fast.
Project description
quicken
Make Python tools fast.
# app/cli.py
import slow_module
import has_lots_of_dependencies
def cli():
print('hello world')
# Finally get to work after everything is loaded.
slow_module.do_work(has_lots_of_dependencies)
# app/main.py
from quicken import cli_factory
@cli_factory('app')
def main():
from .cli import cli
return cli
That's it! The first time main()
is invoked a server will be created and
stay up even after the process finishes. When another process starts up it
will request the server to execute cli
instead of reloading all modules
(and dependencies) from disk. This relies on the speed of fork
being lower
than the startup time of a typical cli application.
If python -c ''
takes 10ms, this module takes around 40ms. That's how
fast your command-line apps can start every time after the server is up.
Why
Python command-line tools are slow. We can reduce dependencies, do lazy importing, and do little/no work at the module level but these can only go so far.
Our goal is to speed up the cli without giving up any dependencies. Every Python CLI tool should be able to get to work in less than 100ms.
Goals
- Be as fast as possible when invoked as a client, be pretty fast when invoked and we need to start a server.
Limitations
- Unix only.
- Debugging may be less obvious for end users or contributors.
- Daemon will not automatically have updated gid list if user was modified.
- Access to the socket file implies access to the daemon (and the associated command that it would run if asked).
Tips
- Profile import time with -X importtime, see if your startup is actually the problem. If it's not then this package will not help you.
- Distribute your package as a wheel. When wheels are installed they create
scripts that do not import
pkg_resources
, which can save 60ms+ depending on disk speed and caching.
Development
ln -sf ../.githooks .git/hooks
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file quicken-0.1.0.tar.gz
.
File metadata
- Download URL: quicken-0.1.0.tar.gz
- Upload date:
- Size: 19.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/0.12.11 CPython/3.7.1 Linux/4.19.11-041911-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1ef2bbdf1c8965f5d4f7e36477222529407e369fbdea3fd4e94b686b08b09fc2 |
|
MD5 | bf127c062618d066cfe0b849b0ee8557 |
|
BLAKE2b-256 | aa21dc60fd882e34c678b002c0a805ec210922cb2f1be6c19f87bec54abd7245 |
File details
Details for the file quicken-0.1.0-py3-none-any.whl
.
File metadata
- Download URL: quicken-0.1.0-py3-none-any.whl
- Upload date:
- Size: 61.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/0.12.11 CPython/3.7.1 Linux/4.19.11-041911-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a11bbc7603c69c712f53eb5f0b81e3fc3c333386e79ce7d58013ceff32abc908 |
|
MD5 | 7519c1ebc74c6c534a756ab479c5ff7b |
|
BLAKE2b-256 | 9f5b97a90771be089664dbdd3361bac07a4e708527ba8943968aea47301cea6c |