用于测试函数是否挂起的zc.monitor插件
zc.isithanging的Python项目详细描述
用于测试函数是否挂起的zc.monitor插件
有时,计算会停止,很难找出原因。工具 像strace可以帮助你,但水平很低。如果电话挂起 调用外部网络服务时,您可能看到的只是一个select或 投票呼叫,而不是服务呼叫。
isithanging为 注册和注销呼叫。为了说明这一点,我们将 使用一个阻塞的测试函数,直到我们通过设置 事件:
>>> import zc.isithanging.tests >>> event, blocker = zc.isithanging.tests.create_blocker()
blocker函数只返回它传递的任何参数。
要检查函数是否被阻塞,我们使用zc.isinhanging.run来 运行函数。我们将在此处以线程的形式执行此操作:
>>> import zc.thread >>> @zc.thread.Thread ... def thread(): ... print zc.isithanging.run(blocker, 1, foo=2)
还有一个decorator负责包装函数并处理 正在调用run。
让我们创造更多的就业机会:
>>> e1, b1 = zc.isithanging.tests.create_blocker() >>> suspect = zc.isithanging.suspect(b1) >>> @zc.thread.Thread ... def t1(): ... print suspect(1)
上面,我们使用可疑的decorator作为函数(而不是 decorator语法。)
>>> e2, b2 = zc.isithanging.tests.create_blocker() >>> @zc.thread.Thread ... def t2(): ... print zc.isithanging.run(b2, 2)
通过查看zc.isithanging.running:
>>> now = time.time() >>> for r in zc.isithanging.running: ... print r.show(now) Sun Nov 16 09:48:29 2014 1s <function f at 0x10251e500> (1,) {'foo': 2} Sun Nov 16 09:48:29 2014 1s <function f at 0x10251e9b0> (1,) {} Sun Nov 16 09:48:29 2014 1s <function f at 0x10251eb18> (2,) {}
show函数显示开始时间、已用时间(秒)、函数 还有争论。
当作业停止时,它会自动注销:
>>> e1.set(); t1.join() ((1,), {})>>> for r in zc.isithanging.running: ... print r Sun Nov 16 09:48:29 2014 2s <function f at 0x102d1e500> (1,) {'foo': 2} Sun Nov 16 09:48:29 2014 2s <function f at 0x102d1eb18> (2,) {}
有一个zc.monitor命令可以打印作业:
>>> import sys >>> zc.isithanging.isithanging(sys.stdout) Sun Nov 16 09:48:29 2014 2s <function f at 0x102d1e500> (1,) {'foo': 2} Sun Nov 16 09:48:29 2014 2s <function f at 0x102d1eb18> (2,) {}
让我们完成作业并重试:
>>> event.set(); thread.join() ((1,), {'foo': 2}) >>> e2.set(); t2.join() ((2,), {})>>> zc.isithanging.isithanging(sys.stdout)
更改
0.3.0(2014-11-17)
添加了一个“嫌疑犯”装饰功能涉嫌悬挂。
0.2.0(2014-11-17)
(意外再释放0.1.)
0.1.0(2014-11-17)
初始版本