{ "info": { "author": "Jim Fulton", "author_email": "jim@zope.com", "bugtrack_url": null, "classifiers": [], "description": "======================================================\nA zc.monitor plugin for testing whether function hangs\n======================================================\n\nSomtimes, computation stops and it can be hard to find out why. Tools\nlike strace can be helpful, but are very low level. If a call hangs\ncalling external network services, all you might see is a select or\npoll call and not what serveice was being called.\n\nIsithanging provides a simple registry and a helper function for\nregistering and unregistering calls. To illustrate how this, we'll\nuse a test function that blocks until we unblock it by setting an\nevent:\n\n >>> import zc.isithanging.tests\n >>> event, blocker = zc.isithanging.tests.create_blocker()\n\nThe blocker function just returns any arguments it was passed.\n\nTo check whether a function is blocking, we use ``zc.isinhanging.run`` to\nrun the function. We'll do so here in a thread:\n\n >>> import zc.thread\n >>> @zc.thread.Thread\n ... def thread():\n ... print zc.isithanging.run(blocker, 1, foo=2)\n\nThere's also a decorator that takes wraps a function and takes care of\ncalling ``run``.\n\nLet's create seome more jobs:\n\n >>> e1, b1 = zc.isithanging.tests.create_blocker()\n >>> suspect = zc.isithanging.suspect(b1)\n >>> @zc.thread.Thread\n ... def t1():\n ... print suspect(1)\n\n.. metadata\n\n >>> for name in '__name__', '__module__', '__code__', '__defaults__':\n ... if not getattr(suspect, name) is getattr(b1, name):\n ... print(name)\n\nAbove, we used the suspect decorator as a function (rather than with\ndecorator syntax.)\n\n >>> e2, b2 = zc.isithanging.tests.create_blocker()\n >>> @zc.thread.Thread\n ... def t2():\n ... print zc.isithanging.run(b2, 2)\n\n.. Give a little time for the threads to start:\n\n >>> import time; time.sleep(.1)\n\n.. Some time passes:\n\n >>> timetime += 1\n\nWe can see what's running by looking at ``zc.isithanging.running``:\n\n >>> now = time.time()\n >>> for r in zc.isithanging.running:\n ... print r.show(now)\n Sun Nov 16 09:48:29 2014 1s (1,) {'foo': 2}\n Sun Nov 16 09:48:29 2014 1s (1,) {}\n Sun Nov 16 09:48:29 2014 1s (2,) {}\n\nThe show function shows start time, elapsed time in seconds, function\nand arguments.\n\n.. Some time passes:\n\n >>> timetime += 1\n\nWhen a job stops, it's automatically unregistered:\n\n >>> e1.set(); t1.join()\n ((1,), {})\n\n >>> for r in zc.isithanging.running:\n ... print r\n Sun Nov 16 09:48:29 2014 2s (1,) {'foo': 2}\n Sun Nov 16 09:48:29 2014 2s (2,) {}\n\nThere's a zc.monitor command that prints the jobs:\n\n >>> import sys\n >>> zc.isithanging.isithanging(sys.stdout)\n Sun Nov 16 09:48:29 2014 2s (1,) {'foo': 2}\n Sun Nov 16 09:48:29 2014 2s (2,) {}\n\nLet's finish the jobs and try again:\n\n >>> event.set(); thread.join()\n ((1,), {'foo': 2})\n >>> e2.set(); t2.join()\n ((2,), {})\n\n >>> zc.isithanging.isithanging(sys.stdout)\n\n\n=======\nChanges\n=======\n\n0.3.0 (2014-11-17)\n==================\n\nAdded a \"suspect\" decorator to decorate functions suspected of hanging.\n\n0.2.0 (2014-11-17)\n==================\n\n(Accidental re-release of 0.1.)\n\n0.1.0 (2014-11-17)\n==================\n\nInitial release", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "UNKNOWN", "keywords": null, "license": "ZPL 2.1", "maintainer": null, "maintainer_email": null, "name": "zc.isithanging", "package_url": "https://pypi.org/project/zc.isithanging/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/zc.isithanging/", "project_urls": { "Download": "UNKNOWN", "Homepage": "UNKNOWN" }, "release_url": "https://pypi.org/project/zc.isithanging/0.3.0/", "requires_dist": null, "requires_python": null, "summary": "A zc.monitor plugin for testing whether function hangs", "version": "0.3.0" }, "last_serial": 1310625, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "3e50113ca13f9656596a6fb13b292ca6", "sha256": "39760d6f281b50410a8af3059b5b70a63720a1c668802b14415cb1391330ade7" }, "downloads": -1, "filename": "zc.isithanging-0.1.0.tar.gz", "has_sig": false, "md5_digest": "3e50113ca13f9656596a6fb13b292ca6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3621, "upload_time": "2014-11-17T16:50:27", "url": "https://files.pythonhosted.org/packages/de/b9/61405cf6714e5aea986afe24ae54ad04f811ec980be86c57960b045b96e0/zc.isithanging-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "071b43a5e05986de8085f1729f1a0226", "sha256": "ec7fa43b0cdab6a733949445d4fa533ce5760926ae078dcc599868a5f4c4e5a9" }, "downloads": -1, "filename": "zc.isithanging-0.2.0.tar.gz", "has_sig": false, "md5_digest": "071b43a5e05986de8085f1729f1a0226", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3625, "upload_time": "2014-11-17T20:20:17", "url": "https://files.pythonhosted.org/packages/65/cc/9abd4d78e4e95549deb53dc8de10cd062044eaa0a1f08eb78a9a0f93129f/zc.isithanging-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "73553570ffa9bcb8409820b9a104001a", "sha256": "7d71e72345a5ed54413c1cde6a158e11c6b905d385a2cd1adcb1a0a56a2f1dae" }, "downloads": -1, "filename": "zc.isithanging-0.3.0.tar.gz", "has_sig": false, "md5_digest": "73553570ffa9bcb8409820b9a104001a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3976, "upload_time": "2014-11-17T21:46:41", "url": "https://files.pythonhosted.org/packages/ef/99/b4e977851ed59e48010502dd6ad7b42fb24a0ace9538ed4196cb2fbe748d/zc.isithanging-0.3.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "73553570ffa9bcb8409820b9a104001a", "sha256": "7d71e72345a5ed54413c1cde6a158e11c6b905d385a2cd1adcb1a0a56a2f1dae" }, "downloads": -1, "filename": "zc.isithanging-0.3.0.tar.gz", "has_sig": false, "md5_digest": "73553570ffa9bcb8409820b9a104001a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3976, "upload_time": "2014-11-17T21:46:41", "url": "https://files.pythonhosted.org/packages/ef/99/b4e977851ed59e48010502dd6ad7b42fb24a0ace9538ed4196cb2fbe748d/zc.isithanging-0.3.0.tar.gz" } ] }