{ "info": { "author": "Martin Aspeli", "author_email": "optilude@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.5", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "Introduction\n============\n\n.. image:: https://secure.travis-ci.org/pyrenees/plone.synchronize.png\n :target: http://travis-ci.org/pyrenees/plone.synchronize\n\nThis package provides a simple decorator to help synchronize methods across\nthreads, to avoid problems of concurrent access.\n\nIt can be used like this::\n\n from threading import Lock\n from plone.synchronize import synchronized\n\n class StupidStack(object):\n\n _elements = [] # not thread safe\n _lock = Lock()\n\n @synchronized(_lock)\n def push(self, item):\n self._elements.append(item)\n\n @synchronized(_lock)\n def pop(self):\n last = self._elements[-1]\n del self._elements[-1]\n return last\n\nThe decorator takes care of calling lock.acquire() just before the method\nis executed, and lock.release() just after. If an exception is raised in the\nmethod, the lock will still be released.\n\nChangelog\n=========\n\n1.0.3 (2018-03-10)\n------------------\n\nBug fixes:\n\n- Release it as a wheel as well as an egg.\n [gforcada]\n\n1.0.2 (2016-11-01)\n------------------\n\nNew features:\n\n- Test Python 3 compatibility.\n [datakurre]\n\n\n1.0.1 - 2011-05-20\n------------------\n\n* Add license metadata.\n [davisagli]\n\n1.0 - 2011-04-30\n----------------\n\n* No changes\n\n1.0b1 - 2009-03-30\n------------------\n\n* Initial release\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://pypi.python.org/pypi/plone.synchronize", "keywords": "synchronized lock decorator", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "plone.synchronize", "package_url": "https://pypi.org/project/plone.synchronize/", "platform": "", "project_url": "https://pypi.org/project/plone.synchronize/", "project_urls": { "Homepage": "https://pypi.python.org/pypi/plone.synchronize" }, "release_url": "https://pypi.org/project/plone.synchronize/1.0.3/", "requires_dist": [ "setuptools" ], "requires_python": "", "summary": "Simple decorators to support synchronized methods", "version": "1.0.3" }, "last_serial": 3655847, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "110da7c73026e4cd68cd9488c2f6a1b0", "sha256": "6bccdf44ab409000eef29bf3aa9177f72f07067ea3cc1ece19772d8b3dad5e39" }, "downloads": -1, "filename": "plone.synchronize-1.0.zip", "has_sig": false, "md5_digest": "110da7c73026e4cd68cd9488c2f6a1b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7431, "upload_time": "2011-04-30T20:54:02", "url": "https://files.pythonhosted.org/packages/28/bf/f58ca150fd2045d65797f72b3b095a51dfee9a0c7b74703dc5031cfe594b/plone.synchronize-1.0.zip" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "d25e86ace8daa0816861296c3288c4fb", "sha256": "370e020130a883a7391b914aa9753a2366cfd72ebb1156d73b12cb8155e98909" }, "downloads": -1, "filename": "plone.synchronize-1.0.1.zip", "has_sig": false, "md5_digest": "d25e86ace8daa0816861296c3288c4fb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8596, "upload_time": "2011-05-20T18:58:20", "url": "https://files.pythonhosted.org/packages/33/24/22903d5811a8cb02d71e9da94e42880381c371897af74dd3b7ab4d56cf8e/plone.synchronize-1.0.1.zip" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "420634eece8e78a9fa63ccb9165c613d", "sha256": "810d0c86ae396627314f699bd3dba30ae2a6c64c50854dfed5c7db273063ea22" }, "downloads": -1, "filename": "plone.synchronize-1.0.2.tar.gz", "has_sig": false, "md5_digest": "420634eece8e78a9fa63ccb9165c613d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4419, "upload_time": "2016-11-01T18:32:45", "url": "https://files.pythonhosted.org/packages/26/91/1a09c3ee8335180415509d319b289c19728c3c55705486b3942142af98b4/plone.synchronize-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "f9263f89aa60aca468e9949fbc8ef2eb", "sha256": "2a773bfebc9ee388637655dc0d167e4183c50629b64e95cf42f7c0aa1881e453" }, "downloads": -1, "filename": "plone.synchronize-1.0.3-py2-none-any.whl", "has_sig": false, "md5_digest": "f9263f89aa60aca468e9949fbc8ef2eb", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 5726, "upload_time": "2018-03-09T23:57:33", "url": "https://files.pythonhosted.org/packages/6c/72/9fa96ef12adda40b038e9cebaf4234d0db6cf4f149006c76561ae80c3f85/plone.synchronize-1.0.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3d1aa6ed222cb03f54a4adc06b973d78", "sha256": "425065a62c7b2b1bc0ee2a7233cce7c24677c2b9eb38993989e8f35d26d15bb6" }, "downloads": -1, "filename": "plone.synchronize-1.0.3.tar.gz", "has_sig": false, "md5_digest": "3d1aa6ed222cb03f54a4adc06b973d78", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4468, "upload_time": "2018-03-09T23:57:35", "url": "https://files.pythonhosted.org/packages/77/9b/32747049aac4e416a596de144b671f9570daeefa4648dcd331752cacbd01/plone.synchronize-1.0.3.tar.gz" } ], "1.0b1": [ { "comment_text": "", "digests": { "md5": "8d7c18f0cb43a7d88a85348e4f5c451a", "sha256": "90560643cdf492d90ba42c979b9f70ea249e09ed8c2a77a43e434e5b4e131edb" }, "downloads": -1, "filename": "plone.synchronize-1.0b1.tar.gz", "has_sig": false, "md5_digest": "8d7c18f0cb43a7d88a85348e4f5c451a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3187, "upload_time": "2009-03-30T06:47:26", "url": "https://files.pythonhosted.org/packages/fb/9b/774d106b6b1bce78052bbd5a5a5d4afa26bc228578dabbd8b13cc6af1d19/plone.synchronize-1.0b1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f9263f89aa60aca468e9949fbc8ef2eb", "sha256": "2a773bfebc9ee388637655dc0d167e4183c50629b64e95cf42f7c0aa1881e453" }, "downloads": -1, "filename": "plone.synchronize-1.0.3-py2-none-any.whl", "has_sig": false, "md5_digest": "f9263f89aa60aca468e9949fbc8ef2eb", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 5726, "upload_time": "2018-03-09T23:57:33", "url": "https://files.pythonhosted.org/packages/6c/72/9fa96ef12adda40b038e9cebaf4234d0db6cf4f149006c76561ae80c3f85/plone.synchronize-1.0.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3d1aa6ed222cb03f54a4adc06b973d78", "sha256": "425065a62c7b2b1bc0ee2a7233cce7c24677c2b9eb38993989e8f35d26d15bb6" }, "downloads": -1, "filename": "plone.synchronize-1.0.3.tar.gz", "has_sig": false, "md5_digest": "3d1aa6ed222cb03f54a4adc06b973d78", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4468, "upload_time": "2018-03-09T23:57:35", "url": "https://files.pythonhosted.org/packages/77/9b/32747049aac4e416a596de144b671f9570daeefa4648dcd331752cacbd01/plone.synchronize-1.0.3.tar.gz" } ] }