{ "info": { "author": "Nikolay Novik", "author_email": "nickolainovik@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Framework :: AsyncIO", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "aiorwlock\n=========\n.. image:: https://travis-ci.com/aio-libs/aiorwlock.svg?branch=master\n :target: https://travis-ci.com/aio-libs/aiorwlock\n.. image:: https://coveralls.io/repos/jettify/aiorwlock/badge.png?branch=master\n :target: https://coveralls.io/r/aio-libs/aiorwlock?branch=master\n.. image:: https://badges.gitter.im/Join%20Chat.svg\n :target: https://gitter.im/aio-libs/Lobby\n :alt: Chat on Gitter\n\nRead write lock for asyncio_ . A ``RWLock`` maintains a pair of associated\nlocks, one for read-only operations and one for writing. The read lock may be\nheld simultaneously by multiple reader tasks, so long as there are\nno writers. The write lock is exclusive.\n\nWhether or not a read-write lock will improve performance over the use of\na mutual exclusion lock depends on the frequency that the data is *read*\ncompared to being *modified*. For example, a collection that is initially\npopulated with data and thereafter infrequently modified, while being\nfrequently searched is an ideal candidate for the use of a read-write lock.\nHowever, if updates become frequent then the data spends most of its time\nbeing exclusively locked and there is little, if any increase in concurrency.\n\n\nImplementation is almost direct port from this patch_.\n\n\nExample with async def\n----------------------\n\nRequires Python 3.5+\n\n.. code:: python\n\n import asyncio\n import aiorwlock\n loop = asyncio.get_event_loop()\n\n\n async def go():\n rwlock = aiorwlock.RWLock(loop=loop)\n async with rwlock.writer:\n # or same way you can acquire reader lock\n # async with rwlock.reader: pass\n print(\"inside writer\")\n await asyncio.sleep(0.1, loop=loop)\n\n loop.run_until_complete(go())\n\n\nFast path\n---------\n\nBy default `RWLock` switches context on lock acquiring. That allows to\nother waiting tasks get the lock even if task that holds the lock\ndoesn't contain context switches (`await fut` statements).\n\nThe default behavior can be switched off by `fast` argument:\n`RWLock(fast=True)`.\n\nLong story short: lock is safe by default, but if you sure you have\ncontext switches (`await`, `async with`, `async for` or `yield from`\nstatements) inside locked code you may want to use `fast=True` for\nminor speedup.\n\n\nLicense\n-------\n\n``aiorwlock`` is offered under the Apache 2 license.\n\n\n.. _asyncio: http://docs.python.org/3.4/library/asyncio.html\n.. _patch: http://bugs.python.org/issue8800\n\nChanges\n-------\n\n0.6.0 (2018-12-18)\n^^^^^^^^^^^^^^^^^^\n* Wake up all readers after writer releases lock #60 (thanks @ranyixu)\n\n* Fixed Python 3.7 compatibility\n\n* Removed old `yield from` syntax\n\n* Minimal supported version is Python 3.5.3\n\n* Removed support for none async context managers\n\n0.5.0 (2017-12-03)\n^^^^^^^^^^^^^^^^^^\n\n* Fix corner cases and deadlock when we upgrade lock from write to\n read #39\n\n* Use loop.create_future instead asyncio.Future if possible\n\n0.4.0 (2015-09-20)\n^^^^^^^^^^^^^^^^^^\n\n* Support Python 3.5 and `async with` statement\n\n* rename `.reader_lock` -> `.reader`, `.writer_lock` ->\n `.writer`. Backward compatibility is preserved.\n\n0.3.0 (2014-02-11)\n^^^^^^^^^^^^^^^^^^\n\n* Add `.locked` property\n\n0.2.0 (2014-02-09)\n^^^^^^^^^^^^^^^^^^\n\n* Make `.release()` non-coroutine\n\n\n0.1.0 (2014-12-22)\n^^^^^^^^^^^^^^^^^^\n\n* Initial release\n\n", "description_content_type": "", "docs_url": null, "download_url": "https://pypi.python.org/pypi/aiorwlock", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/aio-libs/aiorwlock", "keywords": "aiorwlock,lock,asyncio", "license": "Apache 2", "maintainer": "", "maintainer_email": "", "name": "aiorwlock", "package_url": "https://pypi.org/project/aiorwlock/", "platform": "POSIX", "project_url": "https://pypi.org/project/aiorwlock/", "project_urls": { "Download": "https://pypi.python.org/pypi/aiorwlock", "Homepage": "https://github.com/aio-libs/aiorwlock" }, "release_url": "https://pypi.org/project/aiorwlock/0.6.0/", "requires_dist": null, "requires_python": "", "summary": "Read write lock for asyncio.", "version": "0.6.0" }, "last_serial": 4609476, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "d8ad56eb16f31079449d1db1fb84f151", "sha256": "11c84457f159e6ef50bc19482732eb3e1e7dcd9f56959b27a0fe85f581eafe0a" }, "downloads": -1, "filename": "aiorwlock-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d8ad56eb16f31079449d1db1fb84f151", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7560, "upload_time": "2014-12-23T09:15:37", "url": "https://files.pythonhosted.org/packages/5c/57/a6e033a6aeb426b4a71f46870acb0678ade1d63e4873eb42f7ee71a40afe/aiorwlock-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "89964554c55d8ee25099f911e300d8af", "sha256": "417f19992729821379c78633cbe1ccbdc13c769d9f37a07ad697465b85426b8c" }, "downloads": -1, "filename": "aiorwlock-0.0.1.tar.gz", "has_sig": false, "md5_digest": "89964554c55d8ee25099f911e300d8af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5254, "upload_time": "2014-12-23T09:15:40", "url": "https://files.pythonhosted.org/packages/47/92/ab2e56442df01399c7ddb44a070a79c6d7c76d1bafe8d43511b5731274d2/aiorwlock-0.0.1.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "ef69ad42aef96ca10342b52cb8a1c454", "sha256": "48811751240325caf0a06fc11f787a28de8d9cd39df32e6716757e27431fe4f4" }, "downloads": -1, "filename": "aiorwlock-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ef69ad42aef96ca10342b52cb8a1c454", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 7692, "upload_time": "2015-02-09T17:02:36", "url": "https://files.pythonhosted.org/packages/5b/42/13cac942b4df21060e631ab4c6e6eeccae2e6d2465ef82b846068a96b527/aiorwlock-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "36640c86f51847c926d22735eff21cc9", "sha256": "68ebe085d080c0199cb316a19e363e4155dcb388e95cdc84456a827ca8749abe" }, "downloads": -1, "filename": "aiorwlock-0.1.0.tar.gz", "has_sig": false, "md5_digest": "36640c86f51847c926d22735eff21cc9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5453, "upload_time": "2015-02-09T17:02:32", "url": "https://files.pythonhosted.org/packages/be/52/8f701c3e151b3a6392abbf8790445af8b499599c28587fabc56bdc4d57ef/aiorwlock-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "7d5a096669ec12d2ee91159bfae93137", "sha256": "acb2dfa5b47b073d9a9befd67f7b64d573232cfbb9a7fa8460f695c2c264090b" }, "downloads": -1, "filename": "aiorwlock-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "7d5a096669ec12d2ee91159bfae93137", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 7694, "upload_time": "2015-02-09T17:12:39", "url": "https://files.pythonhosted.org/packages/1b/fd/d953454851fa6da2bf1931818602312a4251bf8277e31c668ee22a00ea49/aiorwlock-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6aac782e4f8ca9f3022b3a1555a86e2c", "sha256": "f95e52b9ea7baad5c37d9802760ae5352d1bd65affb4d7bc5849532d8783a891" }, "downloads": -1, "filename": "aiorwlock-0.1.1.tar.gz", "has_sig": false, "md5_digest": "6aac782e4f8ca9f3022b3a1555a86e2c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5448, "upload_time": "2015-02-09T17:12:37", "url": "https://files.pythonhosted.org/packages/72/d9/fc33e3cb25ce30eace1e8de2fe5924cab474c10a5156c42271bb79aa5491/aiorwlock-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "4486d2b9fbb401bf09ae45c4e196577b", "sha256": "277ea08479e0a3a356a10b84f0835ae7dbc86c647935c8c9da73d9fcca084ba6" }, "downloads": -1, "filename": "aiorwlock-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "4486d2b9fbb401bf09ae45c4e196577b", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 8232, "upload_time": "2015-02-10T09:16:29", "url": "https://files.pythonhosted.org/packages/58/a9/933b5542a2f4c1ed5bbd0c54fa356dd1bb92f8bd6a15b5d909667c2fdaae/aiorwlock-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3cb4b41a4fcb94c99ccad281e3581639", "sha256": "bf6b20e744d833bc98f2b08aafe79555ee09cf479f847508363f07a83a632d44" }, "downloads": -1, "filename": "aiorwlock-0.2.0.tar.gz", "has_sig": false, "md5_digest": "3cb4b41a4fcb94c99ccad281e3581639", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5842, "upload_time": "2015-02-10T09:16:26", "url": "https://files.pythonhosted.org/packages/d9/3c/124753c57404677d326e1ce2f89f92927baa501ae3004e9ab369b2f235d3/aiorwlock-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "188f6522a5d247d534e489057d8d62a0", "sha256": "be7d6dbb87a45440bf1f4604c8d6dba4da5e1dee9d92af7473568d7742d73b51" }, "downloads": -1, "filename": "aiorwlock-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "188f6522a5d247d534e489057d8d62a0", "packagetype": "bdist_wheel", "python_version": "3.4", "requires_python": null, "size": 8415, "upload_time": "2015-02-11T13:55:34", "url": "https://files.pythonhosted.org/packages/e3/78/2654b868bc2fa8bf6d42be5fd3bc99940d82756072c52031584ad2e1e614/aiorwlock-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "255156478350b1951f6c2b8f1c764395", "sha256": "7ec9ef8f535accbe5e39adbe87b7b2029b88dfc6b6ff0cc667f78e5ff0ac642a" }, "downloads": -1, "filename": "aiorwlock-0.3.0.tar.gz", "has_sig": false, "md5_digest": "255156478350b1951f6c2b8f1c764395", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5969, "upload_time": "2015-02-11T13:55:31", "url": "https://files.pythonhosted.org/packages/28/1b/82d4e843615f16518b026c1750aa948485e8d448b79958a83ed0d03413bb/aiorwlock-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "c9d2ceef575ee23c13ef906debe9dfa3", "sha256": "ca4dead49899e0c6a32d7582e31c33dcf5cf9aadda16c0c5eb84e9badc899109" }, "downloads": -1, "filename": "aiorwlock-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c9d2ceef575ee23c13ef906debe9dfa3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6721, "upload_time": "2015-09-20T07:21:05", "url": "https://files.pythonhosted.org/packages/df/22/b9686ff4dbd61a7da5aecd57a1b7d940e961f0a4538cd6985096b1c125a3/aiorwlock-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6f4e04392886b0e08ec51c4548a1be85", "sha256": "4247c575dfb396c4afc6e25fad715a56029013ccf1e3b3c22e972df7ae06bbc2" }, "downloads": -1, "filename": "aiorwlock-0.4.0.tar.gz", "has_sig": false, "md5_digest": "6f4e04392886b0e08ec51c4548a1be85", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7214, "upload_time": "2015-09-20T07:21:13", "url": "https://files.pythonhosted.org/packages/f6/6c/dd20872ca1c31f8cf3cd5bccb66888472ec5e2a38a68ca0e13429b51d1e3/aiorwlock-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "5b658352fb6c3d06e7168b2320afa54b", "sha256": "9341475e24a1a506a5e69345b8cab032500db73d45a752e94176def185bc16e8" }, "downloads": -1, "filename": "aiorwlock-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5b658352fb6c3d06e7168b2320afa54b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7299, "upload_time": "2017-12-03T10:27:58", "url": "https://files.pythonhosted.org/packages/ad/7a/159414a6649595fe6e4e18f4e77c921e489289715e11bf2ee4fd5582b98e/aiorwlock-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ee741761e4c9b1612e9dccf7f8bccdd0", "sha256": "3cd892576d024934d72c3dd098033f276ace3495e71a1197daa8d21409a52174" }, "downloads": -1, "filename": "aiorwlock-0.5.0.tar.gz", "has_sig": false, "md5_digest": "ee741761e4c9b1612e9dccf7f8bccdd0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13559, "upload_time": "2017-12-03T10:28:00", "url": "https://files.pythonhosted.org/packages/0c/20/d30f332e6ecb2be467ab5603e277b26e3a8eb2a72f75bf8d309bdd4c0c82/aiorwlock-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "04f628e4d54b62e8623ad0e4fc6e5eb9", "sha256": "3de1aac408f55aaca73fb45368b0ea9b5f9c23ca0198c82ad17d35c7ee885152" }, "downloads": -1, "filename": "aiorwlock-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "04f628e4d54b62e8623ad0e4fc6e5eb9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9509, "upload_time": "2018-12-17T20:40:41", "url": "https://files.pythonhosted.org/packages/77/3e/edb74e6177b49512291edcb5d12a125560f0dd03c1ee8ea15c55c707cdcc/aiorwlock-0.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8eccf28315b4f851f6f7e9332edeec52", "sha256": "cd310f33a7ea3bf6fd76fcf0c1ba6e4d7eef4d5ded59e95859494425fb7e599d" }, "downloads": -1, "filename": "aiorwlock-0.6.0.tar.gz", "has_sig": false, "md5_digest": "8eccf28315b4f851f6f7e9332edeec52", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12513, "upload_time": "2018-12-17T20:40:42", "url": "https://files.pythonhosted.org/packages/77/cf/2a2584c4fc1096ae959d7d189f205eb9c872ec58aca2cde16009d2d83b9e/aiorwlock-0.6.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "04f628e4d54b62e8623ad0e4fc6e5eb9", "sha256": "3de1aac408f55aaca73fb45368b0ea9b5f9c23ca0198c82ad17d35c7ee885152" }, "downloads": -1, "filename": "aiorwlock-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "04f628e4d54b62e8623ad0e4fc6e5eb9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9509, "upload_time": "2018-12-17T20:40:41", "url": "https://files.pythonhosted.org/packages/77/3e/edb74e6177b49512291edcb5d12a125560f0dd03c1ee8ea15c55c707cdcc/aiorwlock-0.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8eccf28315b4f851f6f7e9332edeec52", "sha256": "cd310f33a7ea3bf6fd76fcf0c1ba6e4d7eef4d5ded59e95859494425fb7e599d" }, "downloads": -1, "filename": "aiorwlock-0.6.0.tar.gz", "has_sig": false, "md5_digest": "8eccf28315b4f851f6f7e9332edeec52", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12513, "upload_time": "2018-12-17T20:40:42", "url": "https://files.pythonhosted.org/packages/77/cf/2a2584c4fc1096ae959d7d189f205eb9c872ec58aca2cde16009d2d83b9e/aiorwlock-0.6.0.tar.gz" } ] }