{ "info": { "author": "zhanghaoran", "author_email": "haoranzeus@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "WoodenWaiter\n============\nPython producer-customer model based on redis\n\nInstallment\n-----------\nuse pip:\n\npip install woodenwaiter\n\nfrom source code:\n\npython3 setup.py install\n\nRun Example\n-----------\npython3 -m woodenwaiter.woodenwaiter\n\nExample Usage\n-------------\nA simple program that showing how to use WoodenWaiter\nas a customer and producer\n\ncustomer example:\n\n.. code-block:: python\n\n import time\n\n from woodenwaiter.woodenwaiter import WoodenWaiter\n from woodenwaiter.woodenwaiter import WoodenCustomer\n from woodenwaiter.woodenwaiter import WoodenManager\n\n if __name__ == '__main__':\n table1 = 'cmdb'\n table2 = 'rbac'\n dish1 = 'custom_sync'\n dish2 = 'some_task'\n waiter = WoodenWaiter()\n\n def print_foods(foods):\n print('custom foods')\n print('foods is: {}'.format(foods))\n\n customer1 = WoodenCustomer(\n table=table1, dish=dish1, waiter=waiter,\n process=print_foods, seconds=1)\n customer2 = WoodenCustomer(\n table=table2, dish=dish2, waiter=waiter,\n process=print_foods, seconds=3)\n\n manager = WoodenManager()\n manager.add_customer(customer1)\n manager.add_customer(customer2)\n manager.launch()\n\n while True:\n time.sleep(1)\n\nproducer example:\n\n.. code-block:: python\n\n import time\n import random\n\n from woodenwaiter.woodenwaiter import WoodenMenu\n from woodenwaiter.woodenwaiter import WoodenWaiter\n from woodenwaiter.woodenwaiter import WoodenCooker\n\n if __name__ == '__main__':\n table1 = 'cmdb'\n table2 = 'rbac'\n dish1 = 'custom_sync'\n dish2 = 'some_task'\n foods1 = {\n \"action\": \"sync_custom_data\",\n \"paras\": \"\"\n }\n foods2 = {\n \"action\": \"some_action\",\n \"paras\": {\n \"para1\": \"value1\",\n \"para2\": \"value2\"\n }\n }\n menu1 = WoodenMenu(table=table1, dish=dish1, foods=foods1)\n menu2 = WoodenMenu(table=table2, dish=dish2, foods=foods2)\n waiter = WoodenWaiter()\n cooker1 = WoodenCooker(menu=menu1, waiter=waiter)\n cooker2 = WoodenCooker(menu=menu2, waiter=waiter)\n\n cooker_running = True\n def cook_sometime():\n while cooker_running:\n seconds = random.randint(3, 10)\n time.sleep(seconds)\n print('cookone after {} seconds'.format(seconds))\n cooker1.cookone()\n cooker2.cookone()\n\n cooker_thread = threading.Thread(target=cook_sometime)\n cooker_thread.start()\n\n while True:\n try:\n time.sleep(1)\n except KeyboardInterrupt:\n cooker_running = False\n manager.terminate_all()\n break\n\nclasses introduce\n-----------------\nInteroduce Classes of WoodenWaiter\n\nWoodenMenu\n~~~~~~~~~~\nEach WoodenCooker cook **ONE** kind of food according to **ONE** WoodenMenu\ninstance. We create WoodenMenu instance by offer a table(maybe your program\nmodel), a dish(maybe one kinds of your task) and foods(some informations\nthe customer need)\n\nsuggested format of parameter 'foods':\n\n.. code-block:: python\n\n foods = {\n \"action\": \"\u8981\u6267\u884c\u7684\u4efb\u52a1\u5b57\u7b26\u4e32\",\n \"paras\": {\"para1\": \"value1\", \"para2\": \"value2\"}\n }\n\nWoodenWaiter\n~~~~~~~~~~~~\nEach WoodenWater connect **ONE** redis database. We use WoodenWaiter to create\nWoodenCooker instance and WoodenCustomer instance.\n\nWoodenWater take dish from WoodenCooker(push task to redis list) and serve dish\nto WoodenCustomer(pop task from redis).\n\nWoodenCooker\n~~~~~~~~~~~~\nCreating an WoodenCooker need a WoodenMenu and a WoodenWaiter.\n\nMethods:\n\nset_menu(self, menu) - set WoodenMenu\n\nset_waiter(self, waiter) - set WoodenWaiter\n\ncookone(self, menu=None) - push a task to redis\n\nWoodenCustomer\n~~~~~~~~~~~~~~\nWoodenCustomer take four parameters:\n\n- table: maybe your program model\n- dish: maybe one kind of your task\n- waiter: a WoodenWaiter instance\n- process: a function that accept a dictionary parameter. This function will be\n call when waiter serve a dish of food(when pop a task from redis).\n- seconds: the seconds of the cycil that waiter check the redis.\n\nWoodenCustomer is inherented from threading.Thread. But start the thread yourself\nis not suggested. Please use WoodenManager instand.\n\nMethods:\n\ncall_waiter(self) - call waiter to check if foods is OK(if there is a task in redis)\n\ncall_waiter_cyclic(self, seconds) - call waiter cyclic\n\nterminate(self) - stop customer thread genteely\n\nWoodenManager\n~~~~~~~~~~~~~\nWoodenManager is used for WoodenCustomer centralized management. We add woodenCustomer\ninstance to it, and then launch the threads\n\nMethods:\n\nadd_customer(self, customer) - add WoodenCustomer instance\n\nlaunch(self) - launch all WoodenCustomer Threads\n\nterminate_all(self) - stop all customers thread genteely\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://github.com/haoranzeus/woodenwaiter", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "woodenwaiter", "package_url": "https://pypi.org/project/woodenwaiter/", "platform": "", "project_url": "https://pypi.org/project/woodenwaiter/", "project_urls": { "Homepage": "https://github.com/haoranzeus/woodenwaiter" }, "release_url": "https://pypi.org/project/woodenwaiter/0.0.4/", "requires_dist": [ "redis" ], "requires_python": "", "summary": "A producer-customer model based on redis", "version": "0.0.4" }, "last_serial": 3040957, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "c6568461138a375229ac3cc565059f29", "sha256": "e6955a198cf51982959342dfe9bd4d0a25888383ec70930ded71cb14c81c1bb9" }, "downloads": -1, "filename": "woodenwaiter-0.0.1-py3.5.egg", "has_sig": false, "md5_digest": "c6568461138a375229ac3cc565059f29", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 7007, "upload_time": "2017-07-20T09:17:26", "url": "https://files.pythonhosted.org/packages/6c/9f/cc1c4217464a0ad249760f947b555dc1f2e62c365cbad32e2cb044bf1247/woodenwaiter-0.0.1-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "2a2c1f4e0466d0cd55c8d4ddc9ec8627", "sha256": "9e09388c5ce4fbe67290166c656d1170b6343f0eb559f7723ffe27eff7000dc5" }, "downloads": -1, "filename": "woodenwaiter-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "2a2c1f4e0466d0cd55c8d4ddc9ec8627", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4108, "upload_time": "2017-07-20T09:17:24", "url": "https://files.pythonhosted.org/packages/6d/72/7d6d77bd2a7dc2d1349e8888ac9f75834dc6394b67f24147ada3e6ebe398/woodenwaiter-0.0.1-py3-none-any.whl" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "d232c93b199314388e694552b1369d94", "sha256": "62b6450ff9369598e93de961f99244eb2f4b86b00e79924b6471812220320c6a" }, "downloads": -1, "filename": "woodenwaiter-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "d232c93b199314388e694552b1369d94", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4159, "upload_time": "2017-07-20T09:30:40", "url": "https://files.pythonhosted.org/packages/4d/eb/49d6accd047c5d940d280ecc719abb5a64dae17a9ba6ee0d5dd58ad48486/woodenwaiter-0.0.2-py3-none-any.whl" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "7bceda56c2e40a7a7c148af1c0fed6f9", "sha256": "e904d73e3d25e2df1bf9b7cc74b100f93786d5cf138831c3d947ee812a26aec8" }, "downloads": -1, "filename": "woodenwaiter-0.0.3-py3.5.egg", "has_sig": false, "md5_digest": "7bceda56c2e40a7a7c148af1c0fed6f9", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 8821, "upload_time": "2017-07-22T04:58:42", "url": "https://files.pythonhosted.org/packages/a4/fb/735384d42b24c29d9bfbcde7542a7ecc5dd1e0bdc3fff7d7c4e69f71435f/woodenwaiter-0.0.3-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "a3c15a6f713419c11350cf6d1844785d", "sha256": "950d44e1de63062b142c484f82c1de1e4028ebedf43e768104ce6df5084baa2e" }, "downloads": -1, "filename": "woodenwaiter-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "a3c15a6f713419c11350cf6d1844785d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6949, "upload_time": "2017-07-20T09:41:23", "url": "https://files.pythonhosted.org/packages/5f/f6/1f36c04773a4b19ec672b679654ef7f66ce68e63963668b2dfbb0bc429ac/woodenwaiter-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ddd9bab67d9f1f505ff9cb656a7587fc", "sha256": "f75bb606fb337b7d77302dc3420123e452e8fa46b77185a9b4f67f1ff613c0ae" }, "downloads": -1, "filename": "woodenwaiter-0.0.3.tar.gz", "has_sig": false, "md5_digest": "ddd9bab67d9f1f505ff9cb656a7587fc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4430, "upload_time": "2017-07-20T09:41:25", "url": "https://files.pythonhosted.org/packages/fb/8c/511f30710db38042304ff4eda428b297d5f9a56090fc560d901e784053dd/woodenwaiter-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "a3e3e23ab0bb4d0ebd476dca95b3d476", "sha256": "9a3bc9ac0b221488e6bd63d8cb7c3bb7a400e8d4c940684ade20ac5db93f3f43" }, "downloads": -1, "filename": "woodenwaiter-0.0.4-py3.5.egg", "has_sig": false, "md5_digest": "a3e3e23ab0bb4d0ebd476dca95b3d476", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 8925, "upload_time": "2017-07-22T04:58:44", "url": "https://files.pythonhosted.org/packages/46/2e/5cb15a8c8fbe7f8e0510bf30c192bfc7da217f50dcbb7b50ea73d4c17d23/woodenwaiter-0.0.4-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "462132c3006a6c5bb28de77a866960d1", "sha256": "369ef5f3e84ced55f2209f99bd534dd5cd1bb6e2f4e419bd2d1aa8f672fe360a" }, "downloads": -1, "filename": "woodenwaiter-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "462132c3006a6c5bb28de77a866960d1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7370, "upload_time": "2017-07-22T04:58:39", "url": "https://files.pythonhosted.org/packages/ce/d9/759eca05d16162eeabbbc95351926490d511adce09b3b54ff2b1d2d9dc9a/woodenwaiter-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "24bbeb0088af98dbf2231aa37d4a17c8", "sha256": "96450aebf8fa494d8414d2e17e29baf1cc7b1bd752cacbf294509ecf6c242da0" }, "downloads": -1, "filename": "woodenwaiter-0.0.4.tar.gz", "has_sig": false, "md5_digest": "24bbeb0088af98dbf2231aa37d4a17c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4713, "upload_time": "2017-07-22T04:58:45", "url": "https://files.pythonhosted.org/packages/22/41/71e71d8c4486cddda9c2bad555cfb7a9d13e037897635cf7e95663d0ea3c/woodenwaiter-0.0.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a3e3e23ab0bb4d0ebd476dca95b3d476", "sha256": "9a3bc9ac0b221488e6bd63d8cb7c3bb7a400e8d4c940684ade20ac5db93f3f43" }, "downloads": -1, "filename": "woodenwaiter-0.0.4-py3.5.egg", "has_sig": false, "md5_digest": "a3e3e23ab0bb4d0ebd476dca95b3d476", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 8925, "upload_time": "2017-07-22T04:58:44", "url": "https://files.pythonhosted.org/packages/46/2e/5cb15a8c8fbe7f8e0510bf30c192bfc7da217f50dcbb7b50ea73d4c17d23/woodenwaiter-0.0.4-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "462132c3006a6c5bb28de77a866960d1", "sha256": "369ef5f3e84ced55f2209f99bd534dd5cd1bb6e2f4e419bd2d1aa8f672fe360a" }, "downloads": -1, "filename": "woodenwaiter-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "462132c3006a6c5bb28de77a866960d1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7370, "upload_time": "2017-07-22T04:58:39", "url": "https://files.pythonhosted.org/packages/ce/d9/759eca05d16162eeabbbc95351926490d511adce09b3b54ff2b1d2d9dc9a/woodenwaiter-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "24bbeb0088af98dbf2231aa37d4a17c8", "sha256": "96450aebf8fa494d8414d2e17e29baf1cc7b1bd752cacbf294509ecf6c242da0" }, "downloads": -1, "filename": "woodenwaiter-0.0.4.tar.gz", "has_sig": false, "md5_digest": "24bbeb0088af98dbf2231aa37d4a17c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4713, "upload_time": "2017-07-22T04:58:45", "url": "https://files.pythonhosted.org/packages/22/41/71e71d8c4486cddda9c2bad555cfb7a9d13e037897635cf7e95663d0ea3c/woodenwaiter-0.0.4.tar.gz" } ] }