{ "info": { "author": "Renato Cunha, Marcos Assuncao", "author_email": "erangb@erangbphaun.pbz, nffhapnb@npz.bet", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows :: Windows 7", "Operating System :: Microsoft :: Windows :: Windows Server 2003", "Operating System :: Microsoft :: Windows :: Windows Server 2008", "Operating System :: Microsoft :: Windows :: Windows Vista", "Operating System :: Microsoft :: Windows :: Windows XP", "Operating System :: POSIX :: BSD :: FreeBSD", "Operating System :: POSIX :: BSD :: OpenBSD", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries", "Topic :: System :: Operating System" ], "description": "Process-shared Reader-Writer locks for Python\n=============================================\n\n.. image:: https://travis-ci.org/trovao/prwlock.svg\n :target: https://travis-ci.org/trovao/prwlock\n\n.. image:: https://coveralls.io/repos/trovao/prwlock/badge.svg?branch=master&service=github\n :target: https://coveralls.io/github/trovao/prwlock?branch=master\n\nA `reader-writer lock `_ for\nPython that can (*must*, actually) be used for locking across multiple Python processes.\n\nThe rationale and initial implementation of the project can be found in the\n`accompanying blog post `_.\n\nInstallation\n------------\n\nThis package is `available on PyPi\n`_, so you can install the latest stable\nrelease with a simple `pip` call:\n\n.. code-block:: bash\n\n $ pip install prwlock\n\nUsage\n-----\n\nAll you have to do is import the module and start using it. There is no need\nfor initialization. Therefore, a code block such as the one below is enough to\nget an RWLock instance.\n\n.. code-block:: python\n\n from prwlock import RWLock\n\n rwlock = RWLock()\n\nThe RWLock itself is pickleable and, therefore, can be passed around to child processes,\nsuch as in the code block below.\n\n.. code-block:: python\n\n from __future__ import print_function\n\n import os\n import time\n\n from multiprocessing import Pool\n from prwlock import RWLock\n def f(rwlock):\n for i in range(2):\n print(os.getpid(), 'Acquiring read lock')\n rwlock.acquire_read()\n print(os.getpid(), 'Sleeping for a while')\n time.sleep(1)\n print(os.getpid(), 'Releasing lock')\n rwlock.release()\n time.sleep(.1)\n\n r = RWLock()\n children = 20\n pool = Pool(processes=children)\n for child in range(children):\n pool.apply_async(f, [r])\n\nContext Managers\n^^^^^^^^^^^^^^^^^\n\n`prwlock` also supports context managers using the `with` syntax. The code\nblock below displays one possible way of using it.\n\n.. code-block:: python\n\n from prwlock import RWLock\n\n # First you instantiate the lock\n rwlock = RWLock()\n\n # Now you can lock it in read or in write mode\n with rwlock.reader_lock():\n # If this executes, then reader lock access has been acquired\n print('Reading data')\n\n # Likewise, you can lock in writer mode with:\n with rwlock.writer_lock():\n print('Writing data')\n\nContributors\n------------\n\n * `Renato Cunha `_\n * `Marcos Assun\u00e7\u00e3o `_\n * `Vyronas Tsingaras `_\n\nChanges\n-------\n\n* 0.4.0: Added context-management support using the `with` syntax;\n* 0.3.0: Completed the API's implementation. Namely:\n * Added support for immediate failure when locks cannot be obtained;\n * Added timeouts for obtaining the locks.\n* 0.2.0: Added support for RWLocks on Windows XP and above. Changed the API so\n that the lock can be imported as `from prwlock import RWLock`, instead of the\n slightly awkward `from prwlock.prwlock import RWLock` method.\n* 0.1.1: Fixed the value of the `PTHREAD_PROCESS_SHARED` constant for Mac OS\n X. Also added a check to prevent double destruction of the underlying lock\n on Mac OS X.\n* 0.1.0: Initial release", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://bitbucket.org/prwlock/prwlock", "keywords": "rwlock posix process-shared process", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "prwlock", "package_url": "https://pypi.org/project/prwlock/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/prwlock/", "project_urls": { "Homepage": "https://bitbucket.org/prwlock/prwlock" }, "release_url": "https://pypi.org/project/prwlock/0.4.0/", "requires_dist": null, "requires_python": "", "summary": "Native process-shared rwlock support for Python", "version": "0.4.0" }, "last_serial": 2408936, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "1b26d6fc1beb457aa21a9ef42c4ce683", "sha256": "c745be90fb73ba3b80209f33b587759a19bdd1bef1915db5c52bef8beb30a0b9" }, "downloads": -1, "filename": "prwlock-0.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "1b26d6fc1beb457aa21a9ef42c4ce683", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 7245, "upload_time": "2015-12-03T09:36:25", "url": "https://files.pythonhosted.org/packages/27/08/6a5d845e31563b4f3ae4986a71b3f2633c670e6d3d84533388c7fdacfa35/prwlock-0.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ab5c8fd78e1442148a8acde4f2676a76", "sha256": "192130cc66674d9a08a18ecf9ea6de9748ca707b876d130c60d89b6b7fb4e86c" }, "downloads": -1, "filename": "prwlock-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ab5c8fd78e1442148a8acde4f2676a76", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7254, "upload_time": "2015-12-03T09:36:35", "url": "https://files.pythonhosted.org/packages/dd/6c/ed53897db1d196b5189837ad9a34549ba934b3b5f79f0339e1a70683bdba/prwlock-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "544af66874185f4e4809378e9fe6b195", "sha256": "332c1481ad1b4035a4679c6e998e91c5f5db7864bc297575cc3a02f086ce342b" }, "downloads": -1, "filename": "prwlock-0.1.0.tar.gz", "has_sig": false, "md5_digest": "544af66874185f4e4809378e9fe6b195", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5072, "upload_time": "2015-12-03T09:36:45", "url": "https://files.pythonhosted.org/packages/e6/5c/80ce26e81eadaf7a66adc636d46bd01cfa65f7969967d88eb40efaa09372/prwlock-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "f8f6d950bf2740af983298e75e8622df", "sha256": "ef112c65bba9566dc89a71a9bd26deb450f5f412f138244e35716377f557e82e" }, "downloads": -1, "filename": "prwlock-0.1.1-py2-none-any.whl", "has_sig": false, "md5_digest": "f8f6d950bf2740af983298e75e8622df", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 7836, "upload_time": "2015-12-08T00:10:47", "url": "https://files.pythonhosted.org/packages/c8/83/aa9796bec9b60ad3902d1ac447cf5521901a2bad69e7c793f4f9b80c2e54/prwlock-0.1.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dd92776e4e5206e8218b4dbe1a119fe3", "sha256": "a5d857dce573be2549d2c6eabb61fbc47af9703eeb68359db608075ca0aa4d13" }, "downloads": -1, "filename": "prwlock-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "dd92776e4e5206e8218b4dbe1a119fe3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7842, "upload_time": "2015-12-08T00:10:55", "url": "https://files.pythonhosted.org/packages/89/4c/0d32bb03a885c7a89b7c43ee46ffc4092b7a794c907622e37d060309b2d7/prwlock-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "060a0af8d546605c90d38bd3b293c3ae", "sha256": "d530f751c698c4ca014eebeafe7d1ca9794429912ee1ce9bf4d6032ba7205c25" }, "downloads": -1, "filename": "prwlock-0.1.1.tar.gz", "has_sig": false, "md5_digest": "060a0af8d546605c90d38bd3b293c3ae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5508, "upload_time": "2015-12-08T00:11:03", "url": "https://files.pythonhosted.org/packages/eb/83/d5efec4bc04ba0924affaa3a3bb05d4a716808742083460d67d4e7d4558d/prwlock-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "201c2d67cf384b6f3f8aeeda538c8f47", "sha256": "cff92ba1481f0fcad43c4c3a7e38e36b2510bff27c4e0d294412dbbdb7c89a12" }, "downloads": -1, "filename": "prwlock-0.2.0-py2-none-any.whl", "has_sig": false, "md5_digest": "201c2d67cf384b6f3f8aeeda538c8f47", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 11750, "upload_time": "2016-01-08T09:05:55", "url": "https://files.pythonhosted.org/packages/03/c8/c0086ca8272fbdd9598d33802982623686a59317d0a40357d2f52a5a0c28/prwlock-0.2.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ed1bd288bb776d4bb9bb194d610877e8", "sha256": "5feb6027d7b33142f4bb9f5879ede0d60233373369228aed86c75f70a89fa829" }, "downloads": -1, "filename": "prwlock-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ed1bd288bb776d4bb9bb194d610877e8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11752, "upload_time": "2016-01-08T09:06:10", "url": "https://files.pythonhosted.org/packages/85/86/283eab163252fff92d2b9cf28153d6ecba1d55ef334176296458a08077be/prwlock-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1f6482b2ab1eabf806fc63d71550d399", "sha256": "cdc3c15e2d6ba0658d4ee7723a9d243be8dc823f8f09ab72cf9280c97b9499be" }, "downloads": -1, "filename": "prwlock-0.2.0.tar.gz", "has_sig": false, "md5_digest": "1f6482b2ab1eabf806fc63d71550d399", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7507, "upload_time": "2016-01-08T09:06:20", "url": "https://files.pythonhosted.org/packages/b7/ba/5cfe223c22262b77c440f262f7d086bfe0a82ea3725dc2f1a37c2c777aad/prwlock-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "130d1c02a9974db1f6ff6c4ec65e1272", "sha256": "6010e3c612a0ec26cde7b28441ab089138b797f40624dc5a7c531405cbaa0d29" }, "downloads": -1, "filename": "prwlock-0.3.0-py2-none-any.whl", "has_sig": false, "md5_digest": "130d1c02a9974db1f6ff6c4ec65e1272", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 14439, "upload_time": "2016-03-11T20:33:52", "url": "https://files.pythonhosted.org/packages/66/70/485c79cae11a4ac41e88060aac64d27fd501a319fdccdc7f2f6bef050c72/prwlock-0.3.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f904595a2b4e489a0fb30005e20eeaee", "sha256": "e63e15801bfcf77a51adf62abddab08e4190e50aadc76d41805edc9d9ebadfb6" }, "downloads": -1, "filename": "prwlock-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f904595a2b4e489a0fb30005e20eeaee", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14442, "upload_time": "2016-03-11T20:33:57", "url": "https://files.pythonhosted.org/packages/8b/f9/780133d526cc217384f72475e6c85f17ef8c0e19d1d41c525356f4988f7f/prwlock-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "acb41788a6f3ff76ae016fae06b10f08", "sha256": "67b49326be461418f9e47dc4b1d2680e1f0b5d541ec5372d7457d443f611267f" }, "downloads": -1, "filename": "prwlock-0.3.0.tar.gz", "has_sig": false, "md5_digest": "acb41788a6f3ff76ae016fae06b10f08", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10915, "upload_time": "2016-03-11T20:34:07", "url": "https://files.pythonhosted.org/packages/2a/85/76344a6a7f87a003d5a3da6a6ce9127ce4377f74f154a52b6406d5b348d8/prwlock-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "cd95c653a6446b82a293f14bad372b22", "sha256": "5f4288ca970bebad15291a3d687004e9dffb7ca4a3f590f56f78ad5d3b950ea8" }, "downloads": -1, "filename": "prwlock-0.4.0-py2-none-any.whl", "has_sig": false, "md5_digest": "cd95c653a6446b82a293f14bad372b22", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 15497, "upload_time": "2016-10-18T22:32:49", "url": "https://files.pythonhosted.org/packages/89/f2/27a2b05efc2c002b3522c663b20414b5385ef4a5d7e267ffdb1547daee80/prwlock-0.4.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fc783605106259aa1b4ff35dca7283a8", "sha256": "eb54912742082dcc313c1c049de09b73f2977cc7e358b6dce0fef4a340d9e694" }, "downloads": -1, "filename": "prwlock-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fc783605106259aa1b4ff35dca7283a8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15497, "upload_time": "2016-10-18T22:32:51", "url": "https://files.pythonhosted.org/packages/b4/fd/acfa6288712bd30f53bcd9149a6fab5953292fef49e2cf9192e378bc2018/prwlock-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7c8577cb0a12dc240b8caa642a862e49", "sha256": "b1faf0141d2d5e13c3ce6428b53de4cbb59107a2db3008dbff9d4e4d5ed97a4b" }, "downloads": -1, "filename": "prwlock-0.4.0.tar.gz", "has_sig": false, "md5_digest": "7c8577cb0a12dc240b8caa642a862e49", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10438, "upload_time": "2016-10-18T22:32:53", "url": "https://files.pythonhosted.org/packages/c7/c9/9a24b6a86d899f957d29024265f24816562fb3940a9cac06d23d38abdb35/prwlock-0.4.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "cd95c653a6446b82a293f14bad372b22", "sha256": "5f4288ca970bebad15291a3d687004e9dffb7ca4a3f590f56f78ad5d3b950ea8" }, "downloads": -1, "filename": "prwlock-0.4.0-py2-none-any.whl", "has_sig": false, "md5_digest": "cd95c653a6446b82a293f14bad372b22", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 15497, "upload_time": "2016-10-18T22:32:49", "url": "https://files.pythonhosted.org/packages/89/f2/27a2b05efc2c002b3522c663b20414b5385ef4a5d7e267ffdb1547daee80/prwlock-0.4.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fc783605106259aa1b4ff35dca7283a8", "sha256": "eb54912742082dcc313c1c049de09b73f2977cc7e358b6dce0fef4a340d9e694" }, "downloads": -1, "filename": "prwlock-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fc783605106259aa1b4ff35dca7283a8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15497, "upload_time": "2016-10-18T22:32:51", "url": "https://files.pythonhosted.org/packages/b4/fd/acfa6288712bd30f53bcd9149a6fab5953292fef49e2cf9192e378bc2018/prwlock-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7c8577cb0a12dc240b8caa642a862e49", "sha256": "b1faf0141d2d5e13c3ce6428b53de4cbb59107a2db3008dbff9d4e4d5ed97a4b" }, "downloads": -1, "filename": "prwlock-0.4.0.tar.gz", "has_sig": false, "md5_digest": "7c8577cb0a12dc240b8caa642a862e49", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10438, "upload_time": "2016-10-18T22:32:53", "url": "https://files.pythonhosted.org/packages/c7/c9/9a24b6a86d899f957d29024265f24816562fb3940a9cac06d23d38abdb35/prwlock-0.4.0.tar.gz" } ] }