{ "info": { "author": "eight", "author_email": "eight04@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "pyThreadWorker\n==============\n\n.. image:: https://travis-ci.org/eight04/pyWorker.svg?branch=master\n :target: https://travis-ci.org/eight04/pyWorker\n\n.. image:: https://codecov.io/gh/eight04/pyWorker/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/eight04/pyWorker\n\n.. image:: https://api.codacy.com/project/badge/Grade/a95224e5ad8c4e52bd8cde3193aab496\n :alt: Codacy Badge\n :target: https://www.codacy.com/app/eight04/pyWorker?utm_source=github.com&utm_medium=referral&utm_content=eight04/pyWorker&utm_campaign=badger\n\n.. image:: https://readthedocs.org/projects/pythreadworker/badge/?version=latest\n :target: http://pythreadworker.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\nA threading library written in python. Help you build threaded app.\n\nThis module was originally included in ComicCrawler_.\n\n.. _ComicCrawler: https://github.com/eight04/ComicCrawler\n\nFeatures\n--------\n\n* Pause, resume, stop, and restart a thread.\n* Support child threads.\n* Easily run asynchronous task across multiple threads.\n* Communicate between threads with events.\n* Use channel to broadcast events.\n\nInstall\n-------\n\n::\n\n pip install pythreadworker\n\nUsage example\n-------------\n\nBasic operations and event:\n\n.. code:: python\n\n #! python3\n\n # Always use worker.sleep. pyWorker would process event queue during \n # waiting.\n from worker import create_worker, listen, sleep\n\n @create_worker\n def increaser():\n count = 1\n\n @listen(\"SET_VALUE\")\n def _(event):\n nonlocal count\n # you don't need a lock to manipulate `count`\n count = event.data\n\n while True:\n print(count)\n # because the listener and the while loop are in the same thread\n count += 1\n sleep(1)\n\n while True:\n command = input(\"input command: \")\n\n if command == \"start\":\n increaser.start()\n\n elif command == \"stop\":\n increaser.stop()\n\n elif command == \"pause\":\n increaser.pause()\n\n elif command == \"resume\":\n increaser.resume()\n\n elif command.startswith(\"set\"):\n increaser.fire(\"SET_VALUE\", int(command[4:]))\n\n elif command == \"exit\":\n increaser.stop()\n break\n\nAsync task:\n\n.. code:: python\n\n #! python3\n\n from worker import aynsc_, sleep\n\n def long_work(t):\n sleep(t)\n return \"Finished in {} second(s)\".format(t)\n\n # The async task will be executed in another thread.\n pending = async_(long_work, 5)\n\n # Do other stuff here...\n\n # Wait the thread to complete and get the result. If the task is already\n # finished, it returns directly with the result.\n print(pending.get())\n\nUse Channel to broadcast events:\n\n.. code:: python\n\n #! python3\n\n from worker import Worker, Channel\n\n channel = Channel()\n\n def create_printer(name):\n printer = Worker()\n\n @printer.listen(\"PRINT\")\n def _(event):\n print(name, \"recieved\", event.data)\n\n channel.sub(printer)\n return printer.start()\n\n foo = create_printer(\"foo\")\n bar = create_printer(\"bar\")\n\n channel.pub(\"PRINT\", \"Hello channel!\")\n\n foo.stop()\n bar.stop()\n\nChild thread and event bubbling/broadcasting:\n\n.. code:: python\n\n #! python3\n\n from worker import Worker, sleep\n\n def create_thread(name, parent):\n thread = Worker(parent=parent)\n\n @thread.listen(\"HELLO\")\n def _(event):\n print(name)\n\n return thread.start()\n\n parent = create_thread(\"parent\", None)\n child = create_thread(\"child\", parent)\n grand = create_thread(\"grand\", child)\n\n # broadcast/bubble is happened in main thread. It doesn't gaurantee the\n # execution order of listeners.\n parent.fire(\"HELLO\", broadcast=True)\n sleep(1)\n grand.fire(\"HELLO\", bubble=True)\n sleep(1)\n\n # stop a parent thread would also stop its children\n parent.stop()\n\nHow it works\n------------\n\nThe module creates a event queue for each thread, including the main thread. When blocking functions are called (``worker.sleep``, ``worker.wait_event``, ``worker.Async.get``, etc), they enter the event loop so the thread can process events, communicate with other threads, or raise an exception during the call.\n\nWhich also means that if you don't use functions provided by pyThreadWorker, the module has no chance to affect your existing code. It should be easy to work with other frameworks.\n\nAPI reference\n-------------\n\nhttp://pythreadworker.readthedocs.io/en/latest/\n\nNotes\n-----\n\n* Thread safe operations: http://effbot.org/pyfaq/what-kinds-of-global-value-mutation-are-thread-safe.htm\n\nChangelog\n---------\n\n* 0.9.0 (Jun 8, 2018)\n\n - **Change: The signature of `later()` is changed. You should use it to schedule a task on the specific thread.**\n - **Change: The listener registered by `listener()` shortcut would be removed once the thread is stopped.**\n - Add: ``permanent`` and ``once`` arguments to ``Listener``.\n - Add: ``Defer``. A util to handle cross thread communication.\n\n* 0.8.0 (Mar 26, 2017)\n\n - Add print_traceback option to Worker.\n - Ability to use ``later`` as decorator.\n - Drop __all__ in __init__.py.\n - **function rename: async -> async_, sync -> await_.**\n - **Async now extends Worker and needs start() to run.**\n - **later() now doesn't use current thread as target by default. To use current thread as target, pass target=True.**\n - Various function are able to used as decorator, including ``await_, async_, later``.\n - Drop daemon Thread, use daemon Worker.\n - Add ``Worker.wait_until``.\n - Add ``create_worker``.\n - Refactor.\n\n* 0.7.0 (Feb 26, 2017)\n\n - Improve docs.\n - Drop ``def target(thread)`` syntax, use ``current()`` to get current thread instead.\n - Use pylint and sphinx.\n - Export `more shortcuts `__.\n\n* 0.6.0 (Jul 1, 2016)\n\n - Add ``thread.later``.\n\n* 0.5.1 (Apr 22, 2016)\n\n - Use float in sleep function.\n\n* 0.5.0 (Apr 22, 2016)\n\n - Add sync.\n\n* 0.4.0 (Apr 20, 2016) **breaking change**\n\n - Interface completely changed\n - Drop ``Message.put, .get``\n - Drop ``UserWorker``\n - Drop ``Worker.create_child``. Use ``parent`` option in constructor instead.\n - Drop ``global_cleanup``\n - Add ``sleep``\n - Add ``current``\n - Add ``Channel``\n - Add ``Listener.priority``\n - Add ``daemon`` option to ``Worker``\n - ``Worker.cleanup`` --> ``Worker.update``\n - ``Worker.message`` --> ``Worker.fire``\n - ``Worker.wait_message`` --> ``Worker.wait_event``\n - ``Worker.message_loop`` --> ``Worker.wait_forever``\n\n* 0.3.0 (Jun 14, 2015)\n\n - Catch BaseException.\n\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/eight04/pyWorker", "keywords": "thread,threading,worker", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pythreadworker", "package_url": "https://pypi.org/project/pythreadworker/", "platform": "", "project_url": "https://pypi.org/project/pythreadworker/", "project_urls": { "Homepage": "https://github.com/eight04/pyWorker" }, "release_url": "https://pypi.org/project/pythreadworker/0.9.0/", "requires_dist": null, "requires_python": "", "summary": "A threading library.", "version": "0.9.0" }, "last_serial": 3942517, "releases": { "0.1.0": [], "0.1.1": [ { "comment_text": "", "digests": { "md5": "8dbc432adb4150a337ecffb89df3eeb3", "sha256": "66a2f45468db7fd9cc377a140e93373b531845c4ad6f8fd6d3112bb40112c73b" }, "downloads": -1, "filename": "pythreadworker-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8dbc432adb4150a337ecffb89df3eeb3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8010, "upload_time": "2015-05-21T13:01:51", "url": "https://files.pythonhosted.org/packages/4f/63/3910896e5c57f72642e8bad96317055f4badb4215369884f002843d30d42/pythreadworker-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7c6a1980f677980e348036858112a9fd", "sha256": "ada6c343b88d680e53a3e1d8ac7b5ee4ce51664b85f1a3f7d33c0d38fb8d1f90" }, "downloads": -1, "filename": "pythreadworker-0.1.1.zip", "has_sig": false, "md5_digest": "7c6a1980f677980e348036858112a9fd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9903, "upload_time": "2015-05-21T13:01:55", "url": "https://files.pythonhosted.org/packages/f8/e8/675205ba8eebd1cd5a7e52434f6f3693354f65e7c7173919ebc78f91e7b1/pythreadworker-0.1.1.zip" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "8d03e33fcc2abedc63ca71e769097932", "sha256": "703552acbd39ffac97b0177b45f22760b9291f10fe360911563fec5053aa1a67" }, "downloads": -1, "filename": "pythreadworker-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "8d03e33fcc2abedc63ca71e769097932", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8817, "upload_time": "2015-06-07T00:59:15", "url": "https://files.pythonhosted.org/packages/c4/a4/30e038ba48c9f0c16a788904e948324ab76c4925c0a89f2e7af4de810df2/pythreadworker-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0d3b47d1387ead5e9c925e22b669fcad", "sha256": "7fb8aa792b3be79d19fd2c0b35311e872d3ae097781e7acd1e0887554da28219" }, "downloads": -1, "filename": "pythreadworker-0.2.0.zip", "has_sig": false, "md5_digest": "0d3b47d1387ead5e9c925e22b669fcad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10547, "upload_time": "2015-06-07T00:59:20", "url": "https://files.pythonhosted.org/packages/39/f7/e2d815ab471c0e1903e198f41a510f57769e0f590105fbda4350c96f748a/pythreadworker-0.2.0.zip" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "f00069ee9858f4407ec951f64db59c93", "sha256": "774625893fd0f5b086acfa0b28610d87ac0e2483299967edf8253f5a4013dc45" }, "downloads": -1, "filename": "pythreadworker-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f00069ee9858f4407ec951f64db59c93", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8897, "upload_time": "2015-06-07T04:37:17", "url": "https://files.pythonhosted.org/packages/01/46/fa42d402e0c52813189ac35d08453393583525cc77fc1746e379f63e4c4b/pythreadworker-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8982ccb8951014a4f7746bab854faa5b", "sha256": "2759678cc4f7d9a9d2c7cdcf4ff743c2c627aa6aca80092cea0a64770449a3c9" }, "downloads": -1, "filename": "pythreadworker-0.2.1.zip", "has_sig": false, "md5_digest": "8982ccb8951014a4f7746bab854faa5b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10617, "upload_time": "2015-06-07T04:37:21", "url": "https://files.pythonhosted.org/packages/a5/e7/3fedb344c4d50d7fc97c150b07bee5681ecdffdd9de5c486a3e6c8b2c684/pythreadworker-0.2.1.zip" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "be220328fc2f27e8832262f67b46ade1", "sha256": "777fc1263edb8c1cea2a5137e65d9c33e0c965cc071ae9355d4c06a378493a3a" }, "downloads": -1, "filename": "pythreadworker-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "be220328fc2f27e8832262f67b46ade1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8932, "upload_time": "2015-06-07T09:40:10", "url": "https://files.pythonhosted.org/packages/7a/6e/eac327eb27eab4fd4123469d4ea6d80a4f3e0d9ac0a8b0e56c66684bbb7b/pythreadworker-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9059a16dd2e0dd973d6cf6110ff13608", "sha256": "57b2e2587e0072b3e9c9d05a9f1a6a898ebb3828e31e5efa884feb5e7d00d03b" }, "downloads": -1, "filename": "pythreadworker-0.2.2.zip", "has_sig": false, "md5_digest": "9059a16dd2e0dd973d6cf6110ff13608", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10660, "upload_time": "2015-06-07T09:40:14", "url": "https://files.pythonhosted.org/packages/dc/df/292ecf83313365e26630b191448e03ebb21cfc3ae5f0c1f76270c5b46b7c/pythreadworker-0.2.2.zip" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "5ad39d93a5e1843e589e3a5c11b97f45", "sha256": "f61ae63e14ad7c52fbfdbb8408c832efaa2cc532cc8dd7b529abde1c0e4d07f4" }, "downloads": -1, "filename": "pythreadworker-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5ad39d93a5e1843e589e3a5c11b97f45", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8986, "upload_time": "2015-06-14T00:18:25", "url": "https://files.pythonhosted.org/packages/49/b3/9eb114cee7196804f7d8ca61e6d7f60fb116728c999e217c85e317e3195b/pythreadworker-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fdb4e176e43f02f118311102bd7df584", "sha256": "fb8b836db25b17ae7ac4e5a2d0e1637a9608ea0b801a37cfc635b8d555120835" }, "downloads": -1, "filename": "pythreadworker-0.3.0.zip", "has_sig": false, "md5_digest": "fdb4e176e43f02f118311102bd7df584", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10690, "upload_time": "2015-06-14T00:18:29", "url": "https://files.pythonhosted.org/packages/0d/ea/a4eda8b63cce22b47d2b0d4cc992fcd0a817445762e568128cd7641f8c9c/pythreadworker-0.3.0.zip" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "5937ea76fdd394e61e3384f7ddd16f16", "sha256": "77c24e21cc9f04523961df7064a44d2b316fa1e7cce06c4fd63d85dd4bc34618" }, "downloads": -1, "filename": "pythreadworker-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5937ea76fdd394e61e3384f7ddd16f16", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9599, "upload_time": "2016-04-20T08:05:23", "url": "https://files.pythonhosted.org/packages/e9/92/a623d2fd0b0370d98e18f7d2db1f41fd7583316f644fba4bd632af07dab3/pythreadworker-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c8ecacc448a826bdfe3c6e0f41047333", "sha256": "5a72f806373b51e0c4906fc4089a8b16c0ae8c62bbc19778f26e6c48dbe4c87f" }, "downloads": -1, "filename": "pythreadworker-0.4.0.zip", "has_sig": false, "md5_digest": "c8ecacc448a826bdfe3c6e0f41047333", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10652, "upload_time": "2016-04-20T08:05:39", "url": "https://files.pythonhosted.org/packages/1c/78/932c439504a169d1f587a42dca4ff6ae5e977aa5b88134a9a48175c8f835/pythreadworker-0.4.0.zip" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "74f8a290dfd707774ea8b8353f367286", "sha256": "8a47afedee46c88859bac1d290825bc72f63fa5ceeba3316adb769bae238b6f4" }, "downloads": -1, "filename": "pythreadworker-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "74f8a290dfd707774ea8b8353f367286", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9637, "upload_time": "2016-04-22T01:28:29", "url": "https://files.pythonhosted.org/packages/c0/f6/43557087b436879d46f08882572ce9fb13719a184a4c52af7a1bc837760b/pythreadworker-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fbf0093cf25a0f29cbe8c82ea6c4b393", "sha256": "b1780b11c4566472e44a2c6f7176d60ea79fec7c423c949c2b29b799ffea96d2" }, "downloads": -1, "filename": "pythreadworker-0.5.0.zip", "has_sig": false, "md5_digest": "fbf0093cf25a0f29cbe8c82ea6c4b393", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10698, "upload_time": "2016-04-22T01:32:00", "url": "https://files.pythonhosted.org/packages/90/72/3dd1c7a18a01170acab620f79da111944b8c9de146fe60007710dbd14a71/pythreadworker-0.5.0.zip" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "9754111197a8e78f3b6d50c2b6defb89", "sha256": "c9cd7a416f831c52e166ecfeb70bbe516ab65c564fbd7670db8876e5e0c7b528" }, "downloads": -1, "filename": "pythreadworker-0.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "9754111197a8e78f3b6d50c2b6defb89", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9683, "upload_time": "2016-04-22T12:13:07", "url": "https://files.pythonhosted.org/packages/04/24/d6ae65f46e9d2699417fc2eace040deab086c2efdd442585d8b27d008957/pythreadworker-0.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "040f3a8e5922ad28317d9dfb26d8b997", "sha256": "c9e038f24d713dd75456b55396a98c8146832e1d5f210d4f91147a09a8801f2b" }, "downloads": -1, "filename": "pythreadworker-0.5.1.zip", "has_sig": false, "md5_digest": "040f3a8e5922ad28317d9dfb26d8b997", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10769, "upload_time": "2016-04-22T12:13:18", "url": "https://files.pythonhosted.org/packages/18/f9/2f6b03fd1810ad659e7b477248610b1e5357971b077e9900ffd185c44205/pythreadworker-0.5.1.zip" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "11ff498f5bd21b6d321fb0546846bc19", "sha256": "94ae02aa7c29d1a12a1965a2c30ecf8b6fb2535df67accc5c944851607025d33" }, "downloads": -1, "filename": "pythreadworker-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "11ff498f5bd21b6d321fb0546846bc19", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9881, "upload_time": "2016-06-30T23:59:48", "url": "https://files.pythonhosted.org/packages/d0/62/6631c5c1e5394a99deac679f650f9b5cfb373e26d28265e089ff6b634486/pythreadworker-0.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6471ae7ec08e1d4a47fdf76b16f8f49f", "sha256": "ea521a62012760dff5b35b3f83f670627f1f2856c687ea13b1c3dd8301bc9f79" }, "downloads": -1, "filename": "pythreadworker-0.6.0.zip", "has_sig": false, "md5_digest": "6471ae7ec08e1d4a47fdf76b16f8f49f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11004, "upload_time": "2016-06-30T23:59:53", "url": "https://files.pythonhosted.org/packages/59/6c/eb95f9e91073d1e1be2773b04b86d349ddc735c21a0babab49558286a06a/pythreadworker-0.6.0.zip" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "71ce65ff6496e68eaa0fc94d768021f9", "sha256": "166d37aae41a95994e33d613992bc3149fedc6698f8bccf6045ef37f08170517" }, "downloads": -1, "filename": "pythreadworker-0.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "71ce65ff6496e68eaa0fc94d768021f9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12722, "upload_time": "2017-02-25T23:43:07", "url": "https://files.pythonhosted.org/packages/4b/06/02c854554c005fde0eac35a1d224a0e8a7fde20b6ca477349b474e0d6a9f/pythreadworker-0.7.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "599633d09072a86a4ca18c7ca8da3761", "sha256": "69340cc95e749214e8299aa46d138d1ed08ebb370d1de8dd077bb0aeef219640" }, "downloads": -1, "filename": "pythreadworker-0.7.0.tar.gz", "has_sig": false, "md5_digest": "599633d09072a86a4ca18c7ca8da3761", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9385, "upload_time": "2017-02-25T23:43:09", "url": "https://files.pythonhosted.org/packages/d2/2d/0fde59ef626702f463e041314f49c36d2403dbca8ee51f2962a54781fbba/pythreadworker-0.7.0.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "723940ca1984c8c3df481d8536826c1a", "sha256": "7e034203eade91ac63bd79e179402cffccc1ef1554c8a46570ab524652e36a7b" }, "downloads": -1, "filename": "pythreadworker-0.8.0-py3-none-any.whl", "has_sig": false, "md5_digest": "723940ca1984c8c3df481d8536826c1a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11718, "upload_time": "2017-03-25T23:34:17", "url": "https://files.pythonhosted.org/packages/1b/3a/ac98b80e6513eecbbaf73d03e1ff5f382c8bacd7982d0e1ebfe32a4dee28/pythreadworker-0.8.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1b8021d6194bc6e44e34192ed560aa93", "sha256": "aa367fe9b302ab7909d441017dc88cf41d65312417a65ad09597a7eb0f74b954" }, "downloads": -1, "filename": "pythreadworker-0.8.0.tar.gz", "has_sig": false, "md5_digest": "1b8021d6194bc6e44e34192ed560aa93", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8594, "upload_time": "2017-03-25T23:34:20", "url": "https://files.pythonhosted.org/packages/1c/98/58fc9877a3c2acdc7d95df40f7681b764b9b5c73548fec48ad1e8c869776/pythreadworker-0.8.0.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "2eed7cb337e3ce4fbb6d2378ca707a85", "sha256": "5330ea7b9d69cdde3ac5a7b9193e6681ca75fa3df6521b4e68528f7c7d7f8015" }, "downloads": -1, "filename": "pythreadworker-0.9.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2eed7cb337e3ce4fbb6d2378ca707a85", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14881, "upload_time": "2018-06-08T10:48:07", "url": "https://files.pythonhosted.org/packages/fc/b3/b5039e2880fbc7c8781cebb5db93e8a909ced296525a1a720be5ab6c1b63/pythreadworker-0.9.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "13d41c52f70018bc81a105927d2fd2ee", "sha256": "507674fb96d52480106c514f100501aafe2ba2b42f8a04bd27e05687700be84d" }, "downloads": -1, "filename": "pythreadworker-0.9.0.tar.gz", "has_sig": false, "md5_digest": "13d41c52f70018bc81a105927d2fd2ee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11398, "upload_time": "2018-06-08T10:48:08", "url": "https://files.pythonhosted.org/packages/ef/6f/744dd5520807e5a7d1d41362364bb4921458b042cc87f20631a4f3bef484/pythreadworker-0.9.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2eed7cb337e3ce4fbb6d2378ca707a85", "sha256": "5330ea7b9d69cdde3ac5a7b9193e6681ca75fa3df6521b4e68528f7c7d7f8015" }, "downloads": -1, "filename": "pythreadworker-0.9.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2eed7cb337e3ce4fbb6d2378ca707a85", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14881, "upload_time": "2018-06-08T10:48:07", "url": "https://files.pythonhosted.org/packages/fc/b3/b5039e2880fbc7c8781cebb5db93e8a909ced296525a1a720be5ab6c1b63/pythreadworker-0.9.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "13d41c52f70018bc81a105927d2fd2ee", "sha256": "507674fb96d52480106c514f100501aafe2ba2b42f8a04bd27e05687700be84d" }, "downloads": -1, "filename": "pythreadworker-0.9.0.tar.gz", "has_sig": false, "md5_digest": "13d41c52f70018bc81a105927d2fd2ee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11398, "upload_time": "2018-06-08T10:48:08", "url": "https://files.pythonhosted.org/packages/ef/6f/744dd5520807e5a7d1d41362364bb4921458b042cc87f20631a4f3bef484/pythreadworker-0.9.0.tar.gz" } ] }