{ "info": { "author": "Peter Wang", "author_email": "wangxu198709@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation", "Topic :: Software Development :: Libraries" ], "description": "persist-queue - A thread-safe, disk-based queue for Python\n==========================================================\n\n.. image:: https://img.shields.io/circleci/project/github/peter-wangxu/persist-queue/master.svg?label=Linux%20%26%20Mac\n :target: https://circleci.com/gh/peter-wangxu/persist-queue\n\n.. image:: https://img.shields.io/appveyor/ci/peter-wangxu/persist-queue/master.svg?label=Windows\n :target: https://ci.appveyor.com/project/peter-wangxu/persist-queue\n\n.. image:: https://img.shields.io/codecov/c/github/peter-wangxu/persist-queue/master.svg\n :target: https://codecov.io/gh/peter-wangxu/persist-queue\n\n.. image:: https://img.shields.io/pypi/v/persist-queue.svg\n :target: https://pypi.python.org/pypi/persist-queue\n\n``persist-queue`` implements a file-based queue and a serial of sqlite3-based queues. The goals is to achieve following requirements:\n\n* Disk-based: each queued item should be stored in disk in case of any crash.\n* Thread-safe: can be used by multi-threaded producers and multi-threaded consumers.\n* Recoverable: Items can be read after process restart.\n* Green-compatible: can be used in ``greenlet`` or ``eventlet`` environment.\n\nWhile *queuelib* and *python-pqueue* cannot fulfil all of above. After some try, I found it's hard to achieve based on their current\nimplementation without huge code change. this is the motivation to start this project.\n\nBy default, *persist-queue* use *pickle* object serialization module to support object instances.\nMost built-in type, like `int`, `dict`, `list` are able to be persisted by `persist-queue` directly, to support customized objects,\nplease refer to `Pickling and unpickling extension types(Python2) `_\nand `Pickling Class Instances(Python3) `_\n\nThis project is based on the achievements of `python-pqueue `_\nand `queuelib `_\n\nRequirements\n------------\n* Python 2.7 or Python 3.x.\n* Full support for Linux.\n* Windows support (with `Caution`_ if ``persistqueue.Queue`` is used).\n\nFeatures\n--------\n\n- Multiple platforms support: Linux, macOS, Windows\n- Pure python\n- Both filed based queues and sqlite3 based queues are supported\n- Filed based queue: multiple serialization protocol support: pickle(default), msgpack, json\n\n\n\nInstallation\n------------\n\nfrom pypi\n^^^^^^^^^\n\n.. code-block:: console\n\n pip install persist-queue\n # for msgpack support, use following command\n pip install persist-queue[extra]\n\n\nfrom source code\n^^^^^^^^^^^^^^^^\n\n.. code-block:: console\n\n git clone https://github.com/peter-wangxu/persist-queue\n cd persist-queue\n python setup.py install\n\n\nBenchmark\n---------\n\nHere are the results for writing/reading **1000** items to the disk comparing the sqlite3 and file queue.\n\n- Windows\n - OS: Windows 10\n - Disk: SATA3 SSD\n - RAM: 16 GiB\n\n+---------------+---------+-------------------------+----------------------------+\n| | Write | Write/Read(1 task_done) | Write/Read(many task_done) |\n+---------------+---------+-------------------------+----------------------------+\n| SQLite3 Queue | 1.8880 | 2.0290 | 3.5940 |\n+---------------+---------+-------------------------+----------------------------+\n| File Queue | 4.9520 | 5.0560 | 8.4900 |\n+---------------+---------+-------------------------+----------------------------+\n\n**windows note**\nPerformance of Windows File Queue has dramatic improvement since `v0.4.1` due to the\natomic renaming support(3-4X faster)\n\n- Linux\n - OS: Ubuntu 16.04 (VM)\n - Disk: SATA3 SSD\n - RAM: 4 GiB\n\n+---------------+--------+-------------------------+----------------------------+\n| | Write | Write/Read(1 task_done) | Write/Read(many task_done) |\n+---------------+--------+-------------------------+----------------------------+\n| SQLite3 Queue | 1.8282 | 1.8075 | 2.8639 |\n+---------------+--------+-------------------------+----------------------------+\n| File Queue | 0.9123 | 1.0411 | 2.5104 |\n+---------------+--------+-------------------------+----------------------------+\n\n- Mac OS\n - OS: 10.14 (macOS Mojave)\n - Disk: PCIe SSD\n - RAM: 16 GiB\n\n+---------------+--------+-------------------------+----------------------------+\n| | Write | Write/Read(1 task_done) | Write/Read(many task_done) |\n+---------------+--------+-------------------------+----------------------------+\n| SQLite3 Queue | 0.1879 | 0.2115 | 0.3147 |\n+---------------+--------+-------------------------+----------------------------+\n| File Queue | 0.5158 | 0.5357 | 1.0446 |\n+---------------+--------+-------------------------+----------------------------+\n\n**note**\n\n- The value above is seconds for reading/writing *1000* items, the less the better.\n- Above result was got from:\n\n.. code-block:: console\n\n python benchmark/run_benchmark.py 1000\n\n\nTo see the real performance on your host, run the script under ``benchmark/run_benchmark.py``:\n\n.. code-block:: console\n\n python benchmark/run_benchmark.py \n\n\nExamples\n--------\n\n\nExample usage with a SQLite3 based queue\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. code-block:: python\n\n >>> import persistqueue\n >>> q = persistqueue.SQLiteQueue('mypath', auto_commit=True)\n >>> q.put('str1')\n >>> q.put('str2')\n >>> q.put('str3')\n >>> q.get()\n 'str1'\n >>> del q\n\n\nClose the console, and then recreate the queue:\n\n.. code-block:: python\n\n >>> import persistqueue\n >>> q = persistqueue.SQLiteQueue('mypath', auto_commit=True)\n >>> q.get()\n 'str2'\n >>>\n\n\nExample usage of SQLite3 based ``UniqueQ``\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nThis queue does not allow duplicate items.\n\n.. code-block:: python\n\n >>> import persistqueue\n >>> q = persistqueue.UniqueQ('mypath')\n >>> q.put('str1')\n >>> q.put('str1')\n >>> q.size\n 1\n >>> q.put('str2')\n >>> q.size\n 2\n >>>\n\nExample usage of SQLite3 based ``SQLiteAckQueue``\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nThe core functions:\n\n- ``get``: get from queue and mark item as unack\n- ``ack``: mark item as acked\n- ``nack``: there might be something wrong with current consumer, so mark item as ready and new consumer will get it\n- ``ack_failed``: there might be something wrong during process, so just mark item as failed.\n\n.. code-block:: python\n\n >>> import persistqueue\n >>> ackq = persistqueue.SQLiteAckQueue('path')\n >>> ackq.put('str1')\n >>> item = ackq.get()\n >>> # Do something with the item\n >>> ackq.ack(item) # If done with the item\n >>> ackq.nack(item) # Else mark item as `nack` so that it can be proceeded again by any worker\n >>> ackq.ack_failed(item) # Or else mark item as `ack_failed` to discard this item\n\n\n\nNote: \n1. The SQLiteAckQueue always uses \"auto_commit=True\".\n2. The Queue could be set in non-block style, e.g. \"SQLiteAckQueue.get(block=False, timeout=5)\".\n\nExample usage with a file based queue\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. code-block:: python\n\n >>> from persistqueue import Queue\n >>> q = Queue(\"mypath\")\n >>> q.put('a')\n >>> q.put('b')\n >>> q.put('c')\n >>> q.get()\n 'a'\n >>> q.task_done()\n\nClose the python console, and then we restart the queue from the same path,\n\n.. code-block:: python\n\n >>> from persistqueue import Queue\n >>> q = Queue('mypath')\n >>> q.get()\n 'b'\n >>> q.task_done()\n\n\n\nExample usage with a SQLite3 based dict\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. code-block:: python\n\n >>> from persisitqueue import PDict\n >>> q = PDict(\"testpath\", \"testname\")\n >>> q['key1'] = 123\n >>> q['key2'] = 321\n >>> q['key1']\n 123\n >>> len(q)\n 2\n >>> del q['key1']\n >>> q['key1']\n Traceback (most recent call last):\n File \"\", line 1, in \n File \"persistqueue\\pdict.py\", line 58, in __getitem__\n raise KeyError('Key: {} not exists.'.format(item))\n KeyError: 'Key: key1 not exists.'\n\nClose the console and restart the PDict\n\n\n.. code-block:: python\n\n >>> from persisitqueue import PDict\n >>> q = PDict(\"testpath\", \"testname\")\n >>> q['key2']\n 321\n\n\nMulti-thread usage for **SQLite3** based queue\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. code-block:: python\n\n from persistqueue import FIFOSQLiteQueue\n\n q = FIFOSQLiteQueue(path=\"./test\", multithreading=True)\n\n def worker():\n while True:\n item = q.get()\n do_work(item)\n\n for i in range(num_worker_threads):\n t = Thread(target=worker)\n t.daemon = True\n t.start()\n\n for item in source():\n q.put(item)\n\n\nmulti-thread usage for **Queue**\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. code-block:: python\n\n from persistqueue import Queue\n\n q = Queue()\n\n def worker():\n while True:\n item = q.get()\n do_work(item)\n q.task_done()\n\n for i in range(num_worker_threads):\n t = Thread(target=worker)\n t.daemon = True\n t.start()\n\n for item in source():\n q.put(item)\n\n q.join() # block until all tasks are done\n\n\n**note**\n\nDue to the limitation of file queue described in issue `#89 `_,\n`task_done` in one thread may acknowledge items in other threads which should not be. Considering the `SQLiteAckQueue` if you have such requirement.\n\n\nSerialization via msgpack/json\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n- v0.4.1: Currently only available for file based Queue**\n- v0.4.2: Also available for SQLite3 based Queues**\n\n.. code-block:: python\n\n >>> from persistqueue\n >>> q = persistqueue.Queue('mypath', persistqueue.serializers.msgpack)\n >>> # via json\n >>> # q = Queue('mypath', persistqueue.serializers.json)\n >>> q.get()\n 'b'\n >>> q.task_done()\n\nTips\n----\n\n``task_done`` is required both for file based queue and SQLite3 based queue (when ``auto_commit=False``)\nto persist the cursor of next ``get`` to the disk.\n\n\nPerformance impact\n------------------\n\n- **WAL**\n\n Starting on v0.3.2, the ``persistqueue`` is leveraging the sqlite3 builtin feature\n `WAL `_ which can improve the performance\n significantly, a general testing indicates that ``persistqueue`` is 2-4 times\n faster than previous version.\n\n- **auto_commit=False**\n\n Since persistqueue v0.3.0, a new parameter ``auto_commit`` is introduced to tweak\n the performance for sqlite3 based queues as needed. When specify ``auto_commit=False``, user\n needs to perform ``queue.task_done()`` to persist the changes made to the disk since\n last ``task_done`` invocation.\n\n- **pickle protocol selection**\n\n From v0.3.6, the ``persistqueue`` will select ``Protocol version 2`` for python2 and ``Protocol version 4`` for python3\n respectively. This selection only happens when the directory is not present when initializing the queue.\n\nTests\n-----\n\n*persist-queue* use ``tox`` to trigger tests.\n\n- Unit test\n\n.. code-block:: console\n\n tox -e \n\nAvailable ````: ``py27``, ``py34``, ``py35``, ``py36``, ``py37``\n\n\n- PEP8 check\n\n.. code-block:: console\n\n tox -e pep8\n\n\n`pyenv `_ is usually a helpful tool to manage multiple versions of Python.\n\nCaution\n-------\n\nCurrently, the atomic operation is supported on Windows while still in experimental,\nThat's saying, the data in ``persistqueue.Queue`` could be in unreadable state when an incidental failure occurs during ``Queue.task_done``.\n\n**DO NOT put any critical data on persistqueue.queue on Windows**.\n\n\nContribution\n------------\n\nSimply fork this repo and send PR for your code change(also tests to cover your change), remember to give a title and description of your PR. I am willing to\nenhance this project with you :).\n\n\nLicense\n-------\n\n`BSD `_\n\nContributors\n------------\n\n`Contributors `_\n\nFAQ\n---\n\n* ``sqlite3.OperationalError: database is locked`` is raised.\n\npersistqueue open 2 connections for the db if ``multithreading=True``, the\nSQLite database is locked until that transaction is committed. The ``timeout``\nparameter specifies how long the connection should wait for the lock to go away\nuntil raising an exception. Default time is **10**, increase ``timeout``\nwhen creating the queue if above error occurs.\n\n* sqlite3 based queues are not thread-safe.\n\nThe sqlite3 queues are heavily tested under multi-threading environment, if you find it's not thread-safe, please\nmake sure you set the ``multithreading=True`` when initializing the queue before submitting new issue:).\n\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/peter-wangxu/persist-queue", "keywords": "", "license": "BSD", "maintainer": "Peter Wang", "maintainer_email": "wangxu198709@gmail.com", "name": "persist-queue", "package_url": "https://pypi.org/project/persist-queue/", "platform": "all", "project_url": "https://pypi.org/project/persist-queue/", "project_urls": { "Homepage": "http://github.com/peter-wangxu/persist-queue" }, "release_url": "https://pypi.org/project/persist-queue/0.4.2/", "requires_dist": [ "msgpack (>=0.5.6); extra == 'extra'" ], "requires_python": "", "summary": "A thread-safe disk based persistent queue in Python.", "version": "0.4.2" }, "last_serial": 4828930, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "70cedb132577659929a50cb0ef21afc5", "sha256": "2b7731ab1da426ef338e33aabf48e5fc32018c09d25c307cc20b6e4fe9c73974" }, "downloads": -1, "filename": "persist-queue-0.1.0.tar.gz", "has_sig": false, "md5_digest": "70cedb132577659929a50cb0ef21afc5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4237, "upload_time": "2016-11-25T11:35:00", "url": "https://files.pythonhosted.org/packages/53/37/5e9e0a2b4cb099faf625afac5e4711d2de29e1eb655e13ad4f3df637c1d7/persist-queue-0.1.0.tar.gz" } ], "0.1.1": [], "0.1.2": [ { "comment_text": "", "digests": { "md5": "db43078fca9c93cc8ea276f7baf30654", "sha256": "0299d9dfa4aa3021bac333ceb1d17405523a29420d0662549dbd8600787314cc" }, "downloads": -1, "filename": "persist-queue-0.1.2.tar.gz", "has_sig": false, "md5_digest": "db43078fca9c93cc8ea276f7baf30654", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5972, "upload_time": "2016-11-27T10:35:56", "url": "https://files.pythonhosted.org/packages/78/51/ed08189a39a4d2fa09fd3dadb3a61631816a79f455a391a9b5706ecf627e/persist-queue-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "03be10a9483f8d4069b8971d0eadbdd2", "sha256": "fb764eb88f5b14472a4ecbbc641fab7ef7a644087f379bd8a791037c549283bc" }, "downloads": -1, "filename": "persist-queue-0.1.3.tar.gz", "has_sig": false, "md5_digest": "03be10a9483f8d4069b8971d0eadbdd2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5861, "upload_time": "2016-11-29T05:28:46", "url": "https://files.pythonhosted.org/packages/ca/27/1c0c7ed4ca69535796e1988d61599af8fe2f277162d0f5850d5d5b396951/persist-queue-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "cc27c181ad7ff39a1bf27302917f77cb", "sha256": "371df66e31a22d6ee661d98ba8fc90a65656cc170d228462fd69ab984bdc6994" }, "downloads": -1, "filename": "persist-queue-0.1.4.tar.gz", "has_sig": false, "md5_digest": "cc27c181ad7ff39a1bf27302917f77cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6342, "upload_time": "2016-11-30T10:37:24", "url": "https://files.pythonhosted.org/packages/2b/31/9198429593b02a7157a22aac0303ce1a47cd041e745c9056f2f4df2cef99/persist-queue-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "faa89b2873cf8ecae50eb78c13142ece", "sha256": "c1835e8d08cdd7f0667f0a5614ba72fd482382f0f70bc741a5ca385c375b62bf" }, "downloads": -1, "filename": "persist-queue-0.1.5.tar.gz", "has_sig": false, "md5_digest": "faa89b2873cf8ecae50eb78c13142ece", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10470, "upload_time": "2017-02-15T03:16:05", "url": "https://files.pythonhosted.org/packages/b5/63/a030b0f23917a89a492f0b7894f1190e00cac6150ff2f04495112da339c9/persist-queue-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "94b4bb3f01ec1f1e5a20e05ff97303fb", "sha256": "31d99a832df07322fc21fcd20546a10992ae910371a1708cf763e2418f63008e" }, "downloads": -1, "filename": "persist-queue-0.1.6.tar.gz", "has_sig": false, "md5_digest": "94b4bb3f01ec1f1e5a20e05ff97303fb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7800, "upload_time": "2017-03-10T06:39:19", "url": "https://files.pythonhosted.org/packages/ef/2e/1c03ae7fab2b3f8b4c9b7864f49a22e3f703f26b0beb725e27630bc5427d/persist-queue-0.1.6.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "ee4def68477d9735c784c3101546b98f", "sha256": "97f9b33397bb0b48380930f6319b0a7a48a893e19ebe92bf4bbfee83a922aa1d" }, "downloads": -1, "filename": "persist_queue-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ee4def68477d9735c784c3101546b98f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13185, "upload_time": "2017-03-13T11:05:30", "url": "https://files.pythonhosted.org/packages/0a/37/9ed0348a1dc94bc4613c763dbdba84fa4e80366e8209f92d7cccfa55d739/persist_queue-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d44bf0f139ba084c487dd181e7966e35", "sha256": "bfb31a978f7109420a14f6a79fff5e762e034a9ff550305e9458433e3928efd5" }, "downloads": -1, "filename": "persist-queue-0.2.0.tar.gz", "has_sig": false, "md5_digest": "d44bf0f139ba084c487dd181e7966e35", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9561, "upload_time": "2017-03-13T11:05:32", "url": "https://files.pythonhosted.org/packages/86/78/316fb22dd6b813fbdba34a1297ed991fbf097c73be0e38caf70be38505fe/persist-queue-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "0fe7200553a4c21785e662baf4cfa359", "sha256": "c560cbb3b455dbf4607154c05492733fc98b1d736652dd35b29e9a0392b1b8e5" }, "downloads": -1, "filename": "persist_queue-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0fe7200553a4c21785e662baf4cfa359", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13408, "upload_time": "2017-03-14T02:57:52", "url": "https://files.pythonhosted.org/packages/7c/2e/3c836980bf2c3a71f22fa77feae66cb95a08684c67e950dc456e0d129492/persist_queue-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "57d1f34a7338af4e724adc7196e20b4b", "sha256": "f8f4a61303e482ec0b8a7b5d2b081e4dce2e8dd14b8a46b536dafb69fbede5fe" }, "downloads": -1, "filename": "persist-queue-0.2.1.tar.gz", "has_sig": false, "md5_digest": "57d1f34a7338af4e724adc7196e20b4b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9753, "upload_time": "2017-03-14T02:57:54", "url": "https://files.pythonhosted.org/packages/fd/3b/2b96ab0d5e0a47885b7097e36441b94a9f7f93f68a942bcd5ddcbb211a8d/persist-queue-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "500c4acbc8d347e9c512ad0de952afb3", "sha256": "a63bf52dd4913f12ddcfb592e89251a7dba85b6f7f63ac6aa3947928bc3424f6" }, "downloads": -1, "filename": "persist_queue-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "500c4acbc8d347e9c512ad0de952afb3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15538, "upload_time": "2017-05-15T07:58:33", "url": "https://files.pythonhosted.org/packages/96/72/fbb6d0b4703bdd1594a4e10a4cdc5ea345e39af3688c74e30f172a032be9/persist_queue-0.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e14aea023f31583352c78f01eb367e9e", "sha256": "b0cbf8a7347b342829673a8cde5d5f5bc01f433b49efb61559cc5a6d5751eb7a" }, "downloads": -1, "filename": "persist-queue-0.2.2.tar.gz", "has_sig": false, "md5_digest": "e14aea023f31583352c78f01eb367e9e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11587, "upload_time": "2017-05-15T07:58:35", "url": "https://files.pythonhosted.org/packages/d5/64/6ac4cc4614f925e304f843d0cc9b7bcc68275f7ca7a5bbdcf18b99818c02/persist-queue-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "f4739f3d3eda4d56cdccf85a2f670cbe", "sha256": "42897f38ffc4bee6db2cfe9e372fec8b1599b69eaf0eef0d7f3d3b543a9ead02" }, "downloads": -1, "filename": "persist_queue-0.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f4739f3d3eda4d56cdccf85a2f670cbe", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15568, "upload_time": "2017-06-05T09:28:39", "url": "https://files.pythonhosted.org/packages/df/60/28a627d472c75bc6e9bb22b90463bd1ac4a62115418fd0bba077ddcfc1ae/persist_queue-0.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "616f97330c86b5b37a09468454de1f47", "sha256": "9a9cf1d7857b0493e877850e2c61e6d92b8120cd41a2f79467088a74ac502aae" }, "downloads": -1, "filename": "persist-queue-0.2.3.tar.gz", "has_sig": false, "md5_digest": "616f97330c86b5b37a09468454de1f47", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12831, "upload_time": "2017-06-05T09:28:41", "url": "https://files.pythonhosted.org/packages/40/a4/357cfef6d7b63d0756aa5550d9e465560ed8e48a672f002797a3450a2038/persist-queue-0.2.3.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "f28444ce64a319830bcb2a80692946fa", "sha256": "7dca07df2d75b4344f525dd2692f692d00288f00f7a92c08192b9b9e80928e14" }, "downloads": -1, "filename": "persist_queue-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f28444ce64a319830bcb2a80692946fa", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18329, "upload_time": "2017-09-23T09:01:21", "url": "https://files.pythonhosted.org/packages/8b/1a/d8f4b3f850c9c79e71dfff834210ba314935efb602844e84db4cbc77ca1b/persist_queue-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "421f0e975c6285416293f6b8b41806ec", "sha256": "931645bef5653d118a259a91761f4fa028b1b8591cca77ac9734a4454c70d74f" }, "downloads": -1, "filename": "persist-queue-0.3.0.tar.gz", "has_sig": false, "md5_digest": "421f0e975c6285416293f6b8b41806ec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12958, "upload_time": "2017-09-23T09:01:22", "url": "https://files.pythonhosted.org/packages/6e/fd/48e68da9fa787373dea326fc252290fd1f33c7de01d507d7d3e1eadde1be/persist-queue-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "464f0571d22e7acb47f80daaca59d077", "sha256": "e17c8f0c8b952ae2c0c183aa4023ca637bb458c1cf41c6132996a7b0a7ddd1a8" }, "downloads": -1, "filename": "persist_queue-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "464f0571d22e7acb47f80daaca59d077", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18747, "upload_time": "2017-10-10T04:53:47", "url": "https://files.pythonhosted.org/packages/72/af/1cb6e590cadb59c3e82c100cd03343e5783c57421827c835d5a8cd4e6065/persist_queue-0.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5ff8718f194febe1cc99cbf7d2fe6854", "sha256": "5f73bfbcbf5b27b6ec4d09359cdd82a979e9a07c512d915c9c0c8cf22d962617" }, "downloads": -1, "filename": "persist-queue-0.3.1.tar.gz", "has_sig": false, "md5_digest": "5ff8718f194febe1cc99cbf7d2fe6854", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15885, "upload_time": "2017-10-10T04:53:49", "url": "https://files.pythonhosted.org/packages/f3/0e/6380c35141f7e3fa9e50da986f0ed751b0fbbf73e77196e92785926c93a8/persist-queue-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "3233c785549b635becbee5323ac9e198", "sha256": "4873f9e56915b5aae889357b4dbf2f76d3c81843569b9dd5a934b21945c3cb3c" }, "downloads": -1, "filename": "persist_queue-0.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3233c785549b635becbee5323ac9e198", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19344, "upload_time": "2017-10-26T07:07:08", "url": "https://files.pythonhosted.org/packages/15/f3/5fc93f0bceb5eff48a239acb87b2e1e336ecde974176e60272ebe48f84d2/persist_queue-0.3.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a8955ef66a7de3265bfc1a05a1a31b8c", "sha256": "781bbf9f5af4d0a914a53cf9ef3759979e2c6355f500ccf7b6e265d5edcc0ac6" }, "downloads": -1, "filename": "persist-queue-0.3.2.tar.gz", "has_sig": false, "md5_digest": "a8955ef66a7de3265bfc1a05a1a31b8c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16447, "upload_time": "2017-10-26T07:07:09", "url": "https://files.pythonhosted.org/packages/8e/7d/5f371260a13339bb4a46c0d499992fc8565e7ef5119c8ef7fbc8c230c30c/persist-queue-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "e1b2e1da210ffcfeb4ccdc8bf597242c", "sha256": "9531ab7959a638eaca3b71dbd5ccc24706f81c96bbd947e5487367bd96a21560" }, "downloads": -1, "filename": "persist_queue-0.3.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e1b2e1da210ffcfeb4ccdc8bf597242c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19352, "upload_time": "2017-11-03T02:17:13", "url": "https://files.pythonhosted.org/packages/4e/4e/5b65b338121e15f383639cff877a2650f9ed1e701ff14c11fb0ccc09c568/persist_queue-0.3.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ef9db25ebb818ecee33a731737b0d26d", "sha256": "d34a464e0f386baa2c7cca470807bd4d509144e4dfa1bd80f41c6c7124579dda" }, "downloads": -1, "filename": "persist-queue-0.3.3.tar.gz", "has_sig": false, "md5_digest": "ef9db25ebb818ecee33a731737b0d26d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16466, "upload_time": "2017-11-03T02:17:15", "url": "https://files.pythonhosted.org/packages/8d/80/e8cf13ea52a014b83e3ec6e1c0bf2d077903440c046edad28f7024b1677b/persist-queue-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "1e900235d616afed4b1c67c9368906e7", "sha256": "3f702bd8a8b4bec169bb5eb2e343898811b916fd0970678a5af0abc186c591f2" }, "downloads": -1, "filename": "persist_queue-0.3.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1e900235d616afed4b1c67c9368906e7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19937, "upload_time": "2017-12-15T11:34:07", "url": "https://files.pythonhosted.org/packages/b7/1b/3e90f8a3266c0bcf11c37e418745e865cd1057c1b0e95aeeae35695f89c4/persist_queue-0.3.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "668963c9fcbbe480061f19209145bd8c", "sha256": "07d28b06b3ab357bd8fd3750b9ecce47b332101129a786da99ffe9575e4ba331" }, "downloads": -1, "filename": "persist-queue-0.3.4.tar.gz", "has_sig": false, "md5_digest": "668963c9fcbbe480061f19209145bd8c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33779, "upload_time": "2017-12-15T11:34:09", "url": "https://files.pythonhosted.org/packages/c9/cb/7bdccd63be9e7a0d17d7625e008d8777212636791c276658e702a9a51f00/persist-queue-0.3.4.tar.gz" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "196f28c22d1540d5b3cbb09b87770fd1", "sha256": "c89ab22b3dbd5b84146d847aeb78fdbd0f515ad951229d3299d8700481b9f2f3" }, "downloads": -1, "filename": "persist_queue-0.3.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "196f28c22d1540d5b3cbb09b87770fd1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 20349, "upload_time": "2018-02-08T13:38:11", "url": "https://files.pythonhosted.org/packages/9e/ed/4eabf54fb37d066dc90a2ca005befb4b380516cb944d8c31b75a00fe017e/persist_queue-0.3.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5e1913de3b4854c3d0eb25355d6a50c7", "sha256": "968b1ad2cb51a0ad8ea060aabef037d9e4d504968471d2c7a59f61b93c01bfad" }, "downloads": -1, "filename": "persist-queue-0.3.5.tar.gz", "has_sig": false, "md5_digest": "5e1913de3b4854c3d0eb25355d6a50c7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14586, "upload_time": "2018-02-08T13:38:12", "url": "https://files.pythonhosted.org/packages/f3/9b/f92a70f183087aeaa1533d5c9735745d45f8e8f042a777b2b638398dba86/persist-queue-0.3.5.tar.gz" } ], "0.3.6": [ { "comment_text": "", "digests": { "md5": "878712cfb66f768395d50092a7ce9e48", "sha256": "ba96d8164e5a728ab7d561e2de597a731f966f4dd029dbd470e90bee0ff9aef4" }, "downloads": -1, "filename": "persist_queue-0.3.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "878712cfb66f768395d50092a7ce9e48", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21158, "upload_time": "2018-05-15T02:03:17", "url": "https://files.pythonhosted.org/packages/16/0e/1e56068d34c1dfe742490b4ba01748843152b5b2d06816670e95e791d945/persist_queue-0.3.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "463b220637a9830690edba3d6047104e", "sha256": "0a649a77bb96152011cfc524fee528cab849d4cbac9b117a1000ce4ae3d99f77" }, "downloads": -1, "filename": "persist-queue-0.3.6.tar.gz", "has_sig": false, "md5_digest": "463b220637a9830690edba3d6047104e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34758, "upload_time": "2018-05-15T02:03:18", "url": "https://files.pythonhosted.org/packages/e5/9d/e20c37a43e12f2ca632aabd4212c501048a9e34f1a77bdaf9849dca677bd/persist-queue-0.3.6.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "0fc8c2e73ddac03de8f6160989739084", "sha256": "2d1a4515015c48a6792498f96aa3e1aae4dbafc52e44bf569068ae85d70db591" }, "downloads": -1, "filename": "persist_queue-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0fc8c2e73ddac03de8f6160989739084", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22131, "upload_time": "2018-06-17T13:24:33", "url": "https://files.pythonhosted.org/packages/65/62/be6d28ff1b1f3c1540e23298908eec64c33c8f2c9df90b7504282ff1ccd5/persist_queue-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "38335cc0bc5a1adc3b7b823409436333", "sha256": "0261b2d737a9ced79ca04fa03ca09a79e68d2923613603187a4be835e0602e52" }, "downloads": -1, "filename": "persist-queue-0.4.0.tar.gz", "has_sig": false, "md5_digest": "38335cc0bc5a1adc3b7b823409436333", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20991, "upload_time": "2018-06-17T13:24:35", "url": "https://files.pythonhosted.org/packages/e0/dc/393b7ae8c5307014deb35739fe3f28cbe740ea8993b53414e0efffa9faad/persist-queue-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "9d8ec4dda7c408b0989fe223d340efa7", "sha256": "5411a0b156f754aacc75dd52c3dc3ebeac83a0b3d11f874a69d91b5bf1a21859" }, "downloads": -1, "filename": "persist_queue-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9d8ec4dda7c408b0989fe223d340efa7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 25000, "upload_time": "2018-10-01T13:27:46", "url": "https://files.pythonhosted.org/packages/22/00/881d4d233a3725fa06e1bc6213debfc35233708897ea7407a477dd925f4d/persist_queue-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7d27c0bb4c97dd91b4ec639af44be024", "sha256": "16604b8ca4f51e1d8567e2847cea08dffd50d35e1a65ed3f14f02ed38bcfc55c" }, "downloads": -1, "filename": "persist-queue-0.4.1.tar.gz", "has_sig": false, "md5_digest": "7d27c0bb4c97dd91b4ec639af44be024", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23503, "upload_time": "2018-10-01T13:27:48", "url": "https://files.pythonhosted.org/packages/50/73/a15b4513d83e6e8b482d4a4b1ddc025449529c5f9231eda0ba1325e7358c/persist-queue-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "68cf0f9e82cb4ec5b900d0ba954af191", "sha256": "ebae6295c83f7bf5624a19f8b52b4c51184b04c3d4be60acc081781fa83eb8d5" }, "downloads": -1, "filename": "persist_queue-0.4.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "68cf0f9e82cb4ec5b900d0ba954af191", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 32555, "upload_time": "2019-02-16T15:05:38", "url": "https://files.pythonhosted.org/packages/02/84/eead01a31a7e45886caf8767d116e84ba38502aabadb96b567fe8cb7843f/persist_queue-0.4.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0a0aefb997c3ee08ff8b848d29b65e96", "sha256": "e272746c8b8b64531a92546556ae7fd121c88d8e87d82f3d988eb0298d901b76" }, "downloads": -1, "filename": "persist-queue-0.4.2.tar.gz", "has_sig": false, "md5_digest": "0a0aefb997c3ee08ff8b848d29b65e96", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24411, "upload_time": "2019-02-16T15:05:41", "url": "https://files.pythonhosted.org/packages/f5/fb/b71f1dac7b26a2a01a708979130ea436abf28e119b20e0816241c09a6e8f/persist-queue-0.4.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "68cf0f9e82cb4ec5b900d0ba954af191", "sha256": "ebae6295c83f7bf5624a19f8b52b4c51184b04c3d4be60acc081781fa83eb8d5" }, "downloads": -1, "filename": "persist_queue-0.4.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "68cf0f9e82cb4ec5b900d0ba954af191", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 32555, "upload_time": "2019-02-16T15:05:38", "url": "https://files.pythonhosted.org/packages/02/84/eead01a31a7e45886caf8767d116e84ba38502aabadb96b567fe8cb7843f/persist_queue-0.4.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0a0aefb997c3ee08ff8b848d29b65e96", "sha256": "e272746c8b8b64531a92546556ae7fd121c88d8e87d82f3d988eb0298d901b76" }, "downloads": -1, "filename": "persist-queue-0.4.2.tar.gz", "has_sig": false, "md5_digest": "0a0aefb997c3ee08ff8b848d29b65e96", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24411, "upload_time": "2019-02-16T15:05:41", "url": "https://files.pythonhosted.org/packages/f5/fb/b71f1dac7b26a2a01a708979130ea436abf28e119b20e0816241c09a6e8f/persist-queue-0.4.2.tar.gz" } ] }