{ "info": { "author": "Zhongbo Tian", "author_email": "tianzhongbo@douban.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: POSIX :: Linux", "Programming Language :: C", "Programming Language :: Cython", "Topic :: Software Development :: Libraries" ], "description": "greenify_\n=========\n\ngreenify_ can make Python extension modules having network operations in C\ncode to be compatible with gevent_.\n\ngreenify_ uses the Dynamic Function Redirecting technique same as ELF-Hook_ \nto patch blocking network operations at runtime, without the need modify\nthe original modules.\n\nCurrently greenify_ only supports ELF format modules, and is tested on Linux.\n\nBuild status\n------------\n\n- Branch **master** : |travis_master|\n\n.. |travis_master| image:: https://travis-ci.org/douban/greenify.svg?branch=master\n :target: https://travis-ci.org/douban/greenify\n\nInstall from source\n-------------------\n\n``greenify`` module is installed using setuptools or pip::\n\n python setup.py install\n\nor::\n\n pip install greenify\n\nUsage\n-----\n\n1. Active greenify_ before initiate environment::\n\n import greenify\n greenify.greenify()\n\n2. Make sure the dynamic module(e.g. libmemcached) is patched before using::\n\n assert greenify.patch_lib('/usr/lib/libmemcached.so')\n\n3. Import and use the corresponding module, which is now gevent_ compatible.\n\nThread Safety\n-------------\n\nOnce activated, the green C functions will, on potentially blocking operation,\npass control to gevent's main event loop, which may switch to other ready\ngreenlet which is also in one of the green functions. So, make sure your C\ncode can handle this kind of execution pause and resume. A thread safe\nprogram usually is ready for greenify, but remember that all the switches\nhappen in a single thread.\n\n\nLicense\n-------\n\ngreenify_ is written and maintained by `douban`_ and is licensed under New BSD license.\n\n\n.. _gevent: http://www.gevent.org\n.. _greenify: https://github.com/douban/greenify\n.. _douban: http://www.douban.com\n.. _ELF-Hook: https://github.com/shoumikhin/ELF-Hook", "description_content_type": null, "docs_url": null, "download_url": "https://github.com/douban/greenify/archive/0.3.2.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/douban/greenify", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "greenify", "package_url": "https://pypi.org/project/greenify/", "platform": "Linux", "project_url": "https://pypi.org/project/greenify/", "project_urls": { "Download": "https://github.com/douban/greenify/archive/0.3.2.tar.gz", "Homepage": "https://github.com/douban/greenify" }, "release_url": "https://pypi.org/project/greenify/0.3.2/", "requires_dist": [ "gevent" ], "requires_python": "", "summary": "Make C module compatible with gevent at runtime.", "version": "0.3.2" }, "last_serial": 3852642, "releases": { "0.2": [ { "comment_text": "", "digests": { "md5": "2fdf3b832eca1733a17fb7a2fc3b9051", "sha256": "4a8f53997ba723b331f94753366aedce27bca127a28bf613531cd64ad3158c04" }, "downloads": -1, "filename": "greenify-0.2.tar.gz", "has_sig": false, "md5_digest": "2fdf3b832eca1733a17fb7a2fc3b9051", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9318, "upload_time": "2014-12-15T08:32:07", "url": "https://files.pythonhosted.org/packages/29/35/dc90a3116ad6417be926a7e7bc5e3e82d015d843b96eddb737d9bafbba4f/greenify-0.2.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "336292323b098ab3ccf5d65f7f052e3f", "sha256": "d4798e76e1e295498a2e367b147dd536f1654d44338a1cecba6be767f7d1a92a" }, "downloads": -1, "filename": "greenify-0.2.1.tar.gz", "has_sig": false, "md5_digest": "336292323b098ab3ccf5d65f7f052e3f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9358, "upload_time": "2016-01-07T04:14:40", "url": "https://files.pythonhosted.org/packages/91/01/1baa9eb5a9934d99328d98c45aa3b4dc43dae2a7190d3f6c790fd7f8d05d/greenify-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "76c2acb5dd3cdac8e659a731cad75910", "sha256": "d4592f61a6aa60f9e75ebb43f8019eadf60c3f261a525ca4100deb5c8218d9b6" }, "downloads": -1, "filename": "greenify-0.2.2.tar.gz", "has_sig": false, "md5_digest": "76c2acb5dd3cdac8e659a731cad75910", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9359, "upload_time": "2016-01-07T05:33:50", "url": "https://files.pythonhosted.org/packages/26/1e/ac2b4afd7184a9e695dd249c8916839fe49f895f3ed6b1cb375247929d24/greenify-0.2.2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "f6e6b5cc51d1d21eb85acd9b4f4cafee", "sha256": "71b8f1f4ee3381dd2cae583477a05ab91f914bc89ae44e12a0c0cd97e07297ea" }, "downloads": -1, "filename": "greenify-0.3.0.tar.gz", "has_sig": false, "md5_digest": "f6e6b5cc51d1d21eb85acd9b4f4cafee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9418, "upload_time": "2016-06-12T03:55:39", "url": "https://files.pythonhosted.org/packages/10/15/79738be40ee92ceab78ad26f7606b0601fdf300f73a459c360802b92f224/greenify-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "3586ea9ff541368ebd475c241fac6088", "sha256": "70a6a558c017429bca09258754f1344399791152efa4d1e140247f55eaffcfd4" }, "downloads": -1, "filename": "greenify-0.3.1.tar.gz", "has_sig": false, "md5_digest": "3586ea9ff541368ebd475c241fac6088", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9317, "upload_time": "2016-10-27T05:33:43", "url": "https://files.pythonhosted.org/packages/aa/85/f568a77c6629f0580832be9b4bdc26dd1cdd8e94f5f1c536ed51c68f9110/greenify-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "97d54e5bf0023e528025298a305ca548", "sha256": "8ef7bf49ea9d31897839f13cecb9473ac88bf040c6432d25f41da42c7fd40382" }, "downloads": -1, "filename": "greenify-0.3.2-cp27-cp27m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "97d54e5bf0023e528025298a305ca548", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 103538, "upload_time": "2016-11-18T13:01:10", "url": "https://files.pythonhosted.org/packages/94/96/60b1904ed211e1b37b1b58bf4e22cc6e709609c4374aec15095e9bf1836c/greenify-0.3.2-cp27-cp27m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "21dbb49158fcf15532ca6881d0d36c4d", "sha256": "116c4545b20b95efa7445815a5946abfdc249bd023dd7d014b220faeada16210" }, "downloads": -1, "filename": "greenify-0.3.2-cp27-cp27mu-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "21dbb49158fcf15532ca6881d0d36c4d", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 103551, "upload_time": "2016-11-18T13:01:13", "url": "https://files.pythonhosted.org/packages/71/e7/d3fb411a9a6864865d0e3ef1ee236950bd7d91a83a841ca4130641f5cd4a/greenify-0.3.2-cp27-cp27mu-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "cb0429c790085e01e8dd3b57fd539f67", "sha256": "dc55192dd2eaa8e4ec780874dd54cf644df3f64c6070494b3bdd2af459e7d319" }, "downloads": -1, "filename": "greenify-0.3.2-cp35-cp35m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "cb0429c790085e01e8dd3b57fd539f67", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 111787, "upload_time": "2016-11-18T13:00:56", "url": "https://files.pythonhosted.org/packages/11/85/d4b034ff482c80ad6d3af28966e8d79ad96f082cfe2d821581f0c69260d2/greenify-0.3.2-cp35-cp35m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "899fcfe6bc37be7338cf1e9d8d5b842e", "sha256": "25fc883b3cb376aeb185a9898b9a2adb2df1efd7675a512b7666110d716cb203" }, "downloads": -1, "filename": "greenify-0.3.2.tar.gz", "has_sig": false, "md5_digest": "899fcfe6bc37be7338cf1e9d8d5b842e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9334, "upload_time": "2016-11-18T13:20:14", "url": "https://files.pythonhosted.org/packages/eb/34/4b36bddcd8fa29ca0799faa091e1fe6db42557476716e0f1029fd6fbfa96/greenify-0.3.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "97d54e5bf0023e528025298a305ca548", "sha256": "8ef7bf49ea9d31897839f13cecb9473ac88bf040c6432d25f41da42c7fd40382" }, "downloads": -1, "filename": "greenify-0.3.2-cp27-cp27m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "97d54e5bf0023e528025298a305ca548", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 103538, "upload_time": "2016-11-18T13:01:10", "url": "https://files.pythonhosted.org/packages/94/96/60b1904ed211e1b37b1b58bf4e22cc6e709609c4374aec15095e9bf1836c/greenify-0.3.2-cp27-cp27m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "21dbb49158fcf15532ca6881d0d36c4d", "sha256": "116c4545b20b95efa7445815a5946abfdc249bd023dd7d014b220faeada16210" }, "downloads": -1, "filename": "greenify-0.3.2-cp27-cp27mu-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "21dbb49158fcf15532ca6881d0d36c4d", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 103551, "upload_time": "2016-11-18T13:01:13", "url": "https://files.pythonhosted.org/packages/71/e7/d3fb411a9a6864865d0e3ef1ee236950bd7d91a83a841ca4130641f5cd4a/greenify-0.3.2-cp27-cp27mu-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "cb0429c790085e01e8dd3b57fd539f67", "sha256": "dc55192dd2eaa8e4ec780874dd54cf644df3f64c6070494b3bdd2af459e7d319" }, "downloads": -1, "filename": "greenify-0.3.2-cp35-cp35m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "cb0429c790085e01e8dd3b57fd539f67", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 111787, "upload_time": "2016-11-18T13:00:56", "url": "https://files.pythonhosted.org/packages/11/85/d4b034ff482c80ad6d3af28966e8d79ad96f082cfe2d821581f0c69260d2/greenify-0.3.2-cp35-cp35m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "899fcfe6bc37be7338cf1e9d8d5b842e", "sha256": "25fc883b3cb376aeb185a9898b9a2adb2df1efd7675a512b7666110d716cb203" }, "downloads": -1, "filename": "greenify-0.3.2.tar.gz", "has_sig": false, "md5_digest": "899fcfe6bc37be7338cf1e9d8d5b842e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9334, "upload_time": "2016-11-18T13:20:14", "url": "https://files.pythonhosted.org/packages/eb/34/4b36bddcd8fa29ca0799faa091e1fe6db42557476716e0f1029fd6fbfa96/greenify-0.3.2.tar.gz" } ] }