{ "info": { "author": "Dmitry Orlov", "author_email": "me@mosquito.su", "bugtrack_url": null, "classifiers": [ "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: Apache Software License", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3 :: Only" ], "description": "forklib\n=======\n\nFork the single process easily\n\nBasic example\n+++++++++++++\n\n.. code-block:: python\n\n import forklib\n import logging\n import os\n from time import sleep\n\n\n logging.basicConfig(level=logging.DEBUG)\n\n def run():\n print(\n \"Proceess #{id} has PID: {pid}\".format(\n id=forklib.get_id(),\n pid=os.getpid()\n )\n )\n sleep(1)\n\n\n def main():\n print(\"Master proccess has PID: {0}\".format(os.getpid()))\n forklib.fork(4, run)\n\n\n\n if __name__ == '__main__':\n main()\n\n\nThis code makes 4 forks. When you try to run it you will see something like this ::\n\n Master proccess has PID: 39485\n DEBUG:forklib.forking:Starting 4 processes\n Proceess #1 has PID: 39487\n Proceess #0 has PID: 39486\n Proceess #2 has PID: 39488\n Proceess #3 has PID: 39489\n DEBUG:forklib.forking:Child with PID: 39487 Number: 1 exited normally\n DEBUG:forklib.forking:Child with PID: 39489 Number: 3 exited normally\n DEBUG:forklib.forking:Child with PID: 39488 Number: 2 exited normally\n DEBUG:forklib.forking:Child with PID: 39486 Number: 0 exited normally\n\n\nForkme will be control forks. When subprocess will be killed or will exit with\nnon-zero code it will be restarted immediately. e.g.::\n\n Master proccess has PID: 7579\n INFO:forklib:Starting 4 processes\n Proceess #0 has PID: 7580\n Proceess #1 has PID: 7581\n Proceess #2 has PID: 7582\n Proceess #3 has PID: 7583\n WARNING:forklib:Child with PID: 7580 Number: 0 killed by signal 9, restarting\n Proceess #0 has PID: 7584\n\n\n\nParallel iteration\n++++++++++++++++++\n\nYou can load the large array of elements on the memory and process it in\nmultiple processes. After forking the memory will not be copied, instead\nthis the copy-on-write mechanism will be used.\n\n.. code-block:: python\n\n from time import sleep\n\n from forklib import fork_map, fork\n import logging\n\n\n logging.basicConfig(level=logging.INFO)\n\n\n def map_func(item):\n return item + 1\n\n\n def main():\n for item in fork_map(map_func, range(20000), workers=10):\n print(item)\n\n fork(2, lambda: sleep(1), auto_restart=True)\n\n\n if __name__ == '__main__':\n main()", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "Apache 2", "maintainer": "Dmitry Orlov", "maintainer_email": "me@mosquito.su", "name": "forklib", "package_url": "https://pypi.org/project/forklib/", "platform": "posix", "project_url": "https://pypi.org/project/forklib/", "project_urls": null, "release_url": "https://pypi.org/project/forklib/0.2.2/", "requires_dist": null, "requires_python": "", "summary": "Fork the single process easily", "version": "0.2.2" }, "last_serial": 4458723, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "2f62e24808230836c420f3a4dd970eb9", "sha256": "49cf105cbcf129a72f8aa7f5cccfd35a6a4f1d0eed5f854cc3ddaf63beaa48dc" }, "downloads": -1, "filename": "forklib-0.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "2f62e24808230836c420f3a4dd970eb9", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 4186, "upload_time": "2018-07-25T11:53:23", "url": "https://files.pythonhosted.org/packages/94/b0/1cb0b6f1fe3c6e68e6317217e28f1e3e3693cf1c47e79e70db65b8a2fcf9/forklib-0.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "32ca82aa021335277e9dc25e52b95105", "sha256": "55df153c0f6bca08f97b17458940ae9473fecf0482758cb068ff490d2b629e32" }, "downloads": -1, "filename": "forklib-0.1.0.tar.gz", "has_sig": false, "md5_digest": "32ca82aa021335277e9dc25e52b95105", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3774, "upload_time": "2018-07-25T11:53:21", "url": "https://files.pythonhosted.org/packages/a9/34/7a102d60f87154850d1e802950323999a0f0ad2fd7a1ea90de0cdb7c8422/forklib-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "9fd6ef79d84ea12461f1187f26f04453", "sha256": "3ace39ba53c265341ec29744b8f3d0eb37390e9297608ef0cb0c2a5903b2b59e" }, "downloads": -1, "filename": "forklib-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "9fd6ef79d84ea12461f1187f26f04453", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4238, "upload_time": "2018-08-01T14:10:48", "url": "https://files.pythonhosted.org/packages/40/03/a431877374a3124b4169ed0cdc61c3781b0cdafc54af448800962024840c/forklib-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6ec13e67735dd588c575bf94615d1ec2", "sha256": "b7e15d23ae42288cca866492d5924455e9f4eb2da872c699542b0bff73216423" }, "downloads": -1, "filename": "forklib-0.2.0.tar.gz", "has_sig": false, "md5_digest": "6ec13e67735dd588c575bf94615d1ec2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3841, "upload_time": "2018-07-25T14:10:34", "url": "https://files.pythonhosted.org/packages/ff/db/2cd96ee433a2de6b177850468d361065bed6b264fa584f81447ab1714f9c/forklib-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "0cdf822414bd71c7131a796d34406ede", "sha256": "721117047447783ca8d72fdb3be547115b24b78c35ed958464d159bb45cf2b5c" }, "downloads": -1, "filename": "forklib-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "0cdf822414bd71c7131a796d34406ede", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4253, "upload_time": "2018-08-01T14:10:49", "url": "https://files.pythonhosted.org/packages/24/06/b4fd79a18c55af37e5a95a8184c2bc4c3f3ea6b7fbb98f91c26bb00036f7/forklib-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9233ff539a139de994caffe4be9fa290", "sha256": "2a6fe7d9203e151237c808c7baf0235cb8e19df96131b144eb6d504eea8b50e3" }, "downloads": -1, "filename": "forklib-0.2.1.tar.gz", "has_sig": false, "md5_digest": "9233ff539a139de994caffe4be9fa290", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3866, "upload_time": "2018-08-01T14:10:51", "url": "https://files.pythonhosted.org/packages/d2/8c/c773500b8322683c5b88038636cc726975ee311b4848b9ddb12e0d04f0da/forklib-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "d202213abb3cf62e9b9ac08dbdd91e8b", "sha256": "2d30ca3f363bb49f53d9d0e75909d6dc6361c94895c6465c9f8d90428854cc71" }, "downloads": -1, "filename": "forklib-0.2.2.tar.gz", "has_sig": false, "md5_digest": "d202213abb3cf62e9b9ac08dbdd91e8b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3856, "upload_time": "2018-11-06T20:09:44", "url": "https://files.pythonhosted.org/packages/20/6f/1bb5d66d92a9b551282f5c4b4c86b03ecb409dca44a7b412137b81d50069/forklib-0.2.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d202213abb3cf62e9b9ac08dbdd91e8b", "sha256": "2d30ca3f363bb49f53d9d0e75909d6dc6361c94895c6465c9f8d90428854cc71" }, "downloads": -1, "filename": "forklib-0.2.2.tar.gz", "has_sig": false, "md5_digest": "d202213abb3cf62e9b9ac08dbdd91e8b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3856, "upload_time": "2018-11-06T20:09:44", "url": "https://files.pythonhosted.org/packages/20/6f/1bb5d66d92a9b551282f5c4b4c86b03ecb409dca44a7b412137b81d50069/forklib-0.2.2.tar.gz" } ] }