{ "info": { "author": "Peter Shinners", "author_email": "pete@shinners.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2" ], "description": "Blister\n=======\n\nAn import hook for Python 2.7 that minimizes the amount of disk access.\nThere will be no change in functionality or feature when the import hook\nis installed, applications run over the network have reduced startup by\n**45 seconds**!\n\nApplications like\n[Autodesk Maya](https://www.autodesk.com/products/maya/overview) and\n[Sidefx Houdini](https://www.sidefx.com/) have Python deeply embedded.\nStudios will deploy many custom and third party modules\nin these environments. This can lead to over 60 entries in the `sys.path`,\nwhich is not a situation the native Python importer is equipped to deal with.\n\nThe software is distributed under the MIT open source license.\n\nHow To\n------\n\nGet the `blister.py` module onto your `$PYTHONPATH`, or use\na package manager like `pip install blister`. You'll also want to edit\nor create a `sitecustomize.py` module with code that looks like this:\n\n```\nimport blister\nblister.install()\n```\n\nResults\n-------\n\nA test script was created that imports several large dependencies.\nThis operation creates 479 new modules into `sys.modules`. On Linux, using\n`strace -e trace=file` this generates 13,619 file operations. By inventing\na new unit, disk operations per module, the vanilla Python interpreter runs\nat an abusive 28.4 DOPM.\n\nBy installing the import hook, this is reduced to 4,139 operations, giving\n8.6 DOPM.\n\nPerformance\n-----------\n\nSo what does this mean for actual performance? These results from several\nenvironments should give you an idea of what to expect. The environments\ntested below were done with a cold filesystem cache, meaning the system\nhad a fresh reboot and had never run Python or imported any of these\nmodules. The \"hot cache\" represents the time to run the script repeatedly.\n\n### Linux on network nfs drive\n\nThe performance gained for the cold cache on the network drive is a big\nsuccess. In this case the cold cache time are actually faster coming over\nthe network than on a local spinning disk.\n\n| | Hot Cache | Cold Cache |\n|---------------------|-----------|------------|\n| Vanilla Python 2.7 | 0.70 sec | 7.89 sec |\n| Blister import hook | 0.65 sec | 2.71 sec |\n\n### Linux on local hard disk\n\nIt appears cutting thousands of file operations has no affect on performance.\nThe cold cache timing likely has too much fluxuation to gather any results.\nThis is on a traditional spinning platters drive, not SSD.\n\n| | Hot Cache | Cold Cache |\n|---------------------|-----------|------------|\n| Vanilla Python 2.7 | 0.43 sec | 9.21 sec |\n| Blister import hook | 0.43 sec | 9.97 sec |\n\n### Windows on local drive\n\nWindows does a good job with the cold cache. It seemed odd that the less\nfile operations resulted in slightly slower times. I expect windows cold\ncache timings are subject to fluxuations. Blister gives a moderate\nperformance bump for the hot cache imports.\n\n| | Hot Cache | Cold Cache |\n|---------------------|-----------|------------|\n| Vanilla Python 2.7 | 1.37 sec | 2.15 sec |\n| Blister import hook | 0.99 sec | 2.37 sec |\n\n### Windows on network drive\n\nThis network drive was both twice as fast for the cold and warm cache tests\non Windows.\n\n| | Hot Cache | Cold Cache |\n|---------------------|-----------|------------|\n| Vanilla Python 2.7 | 6.63 sec | 8.92 sec |\n| Blister import hook | 3.95 sec | 5.12 sec |\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://gitlab.com/shredwheat/blister", "keywords": "import hook file stat disk", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "blister", "package_url": "https://pypi.org/project/blister/", "platform": "", "project_url": "https://pypi.org/project/blister/", "project_urls": { "Homepage": "https://gitlab.com/shredwheat/blister" }, "release_url": "https://pypi.org/project/blister/1.1.3/", "requires_dist": null, "requires_python": "", "summary": "Import hook that minimizes file stats", "version": "1.1.3" }, "last_serial": 3030553, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "2a23725d9424fd170e47a2b26a7f50be", "sha256": "30fccfcd093386a1b8e37ba8bd78b0b676e48e1f95dbc10d0e3065a974720d2b" }, "downloads": -1, "filename": "blister-1.0.0.tar.gz", "has_sig": false, "md5_digest": "2a23725d9424fd170e47a2b26a7f50be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5461, "upload_time": "2017-05-24T05:17:12", "url": "https://files.pythonhosted.org/packages/04/9f/5c1a500fc0fc6737388e09d19ba1c85aeba74b679ed25b61f31050992248/blister-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "aa93866d9a133e6344b82b4ff4ae3754", "sha256": "ab0eb2ad376964a9b9fcb17e576a94ed6bab65c59bc0bc4731dc0dd19dce9405" }, "downloads": -1, "filename": "blister-1.0.1.tar.gz", "has_sig": false, "md5_digest": "aa93866d9a133e6344b82b4ff4ae3754", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5584, "upload_time": "2017-05-25T05:11:54", "url": "https://files.pythonhosted.org/packages/6b/7c/a7f316c8bd23470a861d3d13aacea0fa77331d88b4c8cd11c3168dfa0dde/blister-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "0f7f5a79c4a0cb681067d3cbe382f8a6", "sha256": "3f0bbb6ab5b6ffd9d45b193d04683c9a56bc8b301d9a682df57bd922532741a6" }, "downloads": -1, "filename": "blister-1.0.2.tar.gz", "has_sig": false, "md5_digest": "0f7f5a79c4a0cb681067d3cbe382f8a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5531, "upload_time": "2017-05-26T04:13:24", "url": "https://files.pythonhosted.org/packages/bc/52/b694fba8860bb6869b9a2411772fdccae86a9ed0b51ea1658f4c7c7ea052/blister-1.0.2.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "890855ce85731f4e5413176af0f929a8", "sha256": "b708b9a94efe4f86a1bf031c24147016c314c26f969228f9a4da2760f90bbc38" }, "downloads": -1, "filename": "blister-1.1.0.tar.gz", "has_sig": false, "md5_digest": "890855ce85731f4e5413176af0f929a8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5643, "upload_time": "2017-06-08T16:02:46", "url": "https://files.pythonhosted.org/packages/ae/16/5c17dc2806ec6cf68d451017a50588aa8e6512fb6feed069dcf1a7adbf61/blister-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "d30198646bcfc95b45e5c14459ba510c", "sha256": "4eef9f170e085a128421a9fc267a2d5f1b47f0ee85d15405c746eccc94b5ad68" }, "downloads": -1, "filename": "blister-1.1.1.tar.gz", "has_sig": false, "md5_digest": "d30198646bcfc95b45e5c14459ba510c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5697, "upload_time": "2017-06-16T06:33:26", "url": "https://files.pythonhosted.org/packages/33/b2/b2019185525047e8dfa28940b70275329f46ed267b835dd344a761405c2b/blister-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "253654a4cf852070348d22d460898d57", "sha256": "51b18426b669fa2a00f6a24d60a81306d56b6618aa6d27d8645a8f8dc405c4a1" }, "downloads": -1, "filename": "blister-1.1.2.tar.gz", "has_sig": false, "md5_digest": "253654a4cf852070348d22d460898d57", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5801, "upload_time": "2017-06-17T06:29:47", "url": "https://files.pythonhosted.org/packages/1a/87/21ac5c1270cb387f8e0e27e0751df1e96040d5fad476b67cd38f1b07cc7b/blister-1.1.2.tar.gz" } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "5a5e9a56d6b9cede5f5b8d05b4dba378", "sha256": "b67aeacc44b2a96f14767a50b02364fcb3b3a0fd4bcfd35b69f35b71c142f49c" }, "downloads": -1, "filename": "blister-1.1.3.tar.gz", "has_sig": false, "md5_digest": "5a5e9a56d6b9cede5f5b8d05b4dba378", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5935, "upload_time": "2017-07-18T07:15:54", "url": "https://files.pythonhosted.org/packages/ac/49/93ea6b99eac66b3c066d18d28704211c9d183590e699accb3da44e5905c1/blister-1.1.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5a5e9a56d6b9cede5f5b8d05b4dba378", "sha256": "b67aeacc44b2a96f14767a50b02364fcb3b3a0fd4bcfd35b69f35b71c142f49c" }, "downloads": -1, "filename": "blister-1.1.3.tar.gz", "has_sig": false, "md5_digest": "5a5e9a56d6b9cede5f5b8d05b4dba378", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5935, "upload_time": "2017-07-18T07:15:54", "url": "https://files.pythonhosted.org/packages/ac/49/93ea6b99eac66b3c066d18d28704211c9d183590e699accb3da44e5905c1/blister-1.1.3.tar.gz" } ] }