{ "info": { "author": "Chris Hunt", "author_email": "chrahunt@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7" ], "description": "# quicken\n\nMake Python tools fast.\n\n```python\n# app/cli.py\nimport slow_module\nimport has_lots_of_dependencies\n\n\ndef cli():\n print('hello world')\n # Finally get to work after everything is loaded.\n slow_module.do_work(has_lots_of_dependencies)\n \n\n# app/main.py\nfrom quicken import cli_factory\n\n\n@cli_factory('app')\ndef main():\n from .cli import cli\n return cli\n```\n\nThat's it! The first time `main()` is invoked a server will be created and\nstay up even after the process finishes. When another process starts up it\nwill request the server to execute `cli` instead of reloading all modules\n(and dependencies) from disk. This relies on the speed of `fork` being lower\nthan the startup time of a typical cli application.\n\nIf `python -c ''` takes 10ms, this module takes around 40ms. That's how\nfast your command-line apps can start every time after the server is up.\n\n\n# Why\n\nPython command-line tools are slow. We can reduce dependencies, do lazy\nimporting, and do little/no work at the module level but these can only go\nso far.\n\nOur goal is to speed up the cli without giving up any dependencies. Every Python\nCLI tool should be able to get to work in less than 100ms.\n\n# Goals\n\n* Be as fast as possible when invoked as a client, be pretty fast when invoked\n and we need to start a server.\n\n# Limitations\n\n* Unix only.\n* Debugging may be less obvious for end users or contributors.\n* Daemon will not automatically have updated gid list if user was modified.\n* Access to the socket file implies access to the daemon (and the associated command that it would run if asked).\n\n# Tips\n\n* Profile import time with -X importtime, see if your startup is actually the\n problem. If it's not then this package will not help you.\n* Distribute your package as a wheel. When wheels are installed they create\n scripts that do not import `pkg_resources`, which can save 60ms+ depending\n on disk speed and caching.\n\n# Development\n\n```\nln -sf ../.githooks .git/hooks\n```\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/chrahunt/quicken", "keywords": "", "license": "MIT", "maintainer": "Chris Hunt", "maintainer_email": "chrahunt@gmail.com", "name": "quicken", "package_url": "https://pypi.org/project/quicken/", "platform": "", "project_url": "https://pypi.org/project/quicken/", "project_urls": { "Homepage": "https://github.com/chrahunt/quicken", "Repository": "https://github.com/chrahunt/quicken" }, "release_url": "https://pypi.org/project/quicken/0.1.0/", "requires_dist": [ "python-daemon (>=2.2,<3.0)", "pid (>=2.2,<3.0)", "psutil (>=5.4,<6.0)", "tblib (>=1.3,<2.0)", "fasteners (>=0.14.1,<0.15.0)" ], "requires_python": ">=3.7,<4.0", "summary": "Make Python apps fast.", "version": "0.1.0" }, "last_serial": 4738345, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "7519c1ebc74c6c534a756ab479c5ff7b", "sha256": "a11bbc7603c69c712f53eb5f0b81e3fc3c333386e79ce7d58013ceff32abc908" }, "downloads": -1, "filename": "quicken-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7519c1ebc74c6c534a756ab479c5ff7b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 61543, "upload_time": "2019-01-25T03:39:38", "url": "https://files.pythonhosted.org/packages/9f/5b/97a90771be089664dbdd3361bac07a4e708527ba8943968aea47301cea6c/quicken-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bf127c062618d066cfe0b849b0ee8557", "sha256": "1ef2bbdf1c8965f5d4f7e36477222529407e369fbdea3fd4e94b686b08b09fc2" }, "downloads": -1, "filename": "quicken-0.1.0.tar.gz", "has_sig": false, "md5_digest": "bf127c062618d066cfe0b849b0ee8557", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 19751, "upload_time": "2019-01-25T03:39:39", "url": "https://files.pythonhosted.org/packages/aa/21/dc60fd882e34c678b002c0a805ec210922cb2f1be6c19f87bec54abd7245/quicken-0.1.0.tar.gz" } ], "0.1.0.dev0": [ { "comment_text": "", "digests": { "md5": "48432df24c4f9bc1d8ea9d3f6e8a9bb4", "sha256": "57538a69c2f3a0ac19e5472b196882f6e9d10583e17c6233c4369d70a56a53f1" }, "downloads": -1, "filename": "quicken-0.1.0.dev0-py3-none-any.whl", "has_sig": false, "md5_digest": "48432df24c4f9bc1d8ea9d3f6e8a9bb4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 22221, "upload_time": "2018-12-10T01:01:38", "url": "https://files.pythonhosted.org/packages/57/c0/59d969401e6c5955bf85b82a12eb23604fc6a28aaf85ccff8a3643c275ec/quicken-0.1.0.dev0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8011a4aed6b5e3d865d1c2b0ed080368", "sha256": "937d7fd5d47c4af713167b900a28c3829e9455cd0b200d3e1004539b9774805e" }, "downloads": -1, "filename": "quicken-0.1.0.dev0.tar.gz", "has_sig": false, "md5_digest": "8011a4aed6b5e3d865d1c2b0ed080368", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 9512, "upload_time": "2018-12-10T01:01:40", "url": "https://files.pythonhosted.org/packages/46/c9/4c6e50be6da5c4aaea4ecefdef6e782d3e4d845f9dd32bb9bdc8c1a24b9b/quicken-0.1.0.dev0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7519c1ebc74c6c534a756ab479c5ff7b", "sha256": "a11bbc7603c69c712f53eb5f0b81e3fc3c333386e79ce7d58013ceff32abc908" }, "downloads": -1, "filename": "quicken-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7519c1ebc74c6c534a756ab479c5ff7b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7,<4.0", "size": 61543, "upload_time": "2019-01-25T03:39:38", "url": "https://files.pythonhosted.org/packages/9f/5b/97a90771be089664dbdd3361bac07a4e708527ba8943968aea47301cea6c/quicken-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bf127c062618d066cfe0b849b0ee8557", "sha256": "1ef2bbdf1c8965f5d4f7e36477222529407e369fbdea3fd4e94b686b08b09fc2" }, "downloads": -1, "filename": "quicken-0.1.0.tar.gz", "has_sig": false, "md5_digest": "bf127c062618d066cfe0b849b0ee8557", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7,<4.0", "size": 19751, "upload_time": "2019-01-25T03:39:39", "url": "https://files.pythonhosted.org/packages/aa/21/dc60fd882e34c678b002c0a805ec210922cb2f1be6c19f87bec54abd7245/quicken-0.1.0.tar.gz" } ] }