用于测试函数是否挂起的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)

初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在jetty请求日志中添加milliscond字段?   java在使用Scanner类从文件读取信息时遇到问题   为什么。类不适用于泛型类型?   SQLite插入上的java空指针异常   java能告诉我们Guava缓存是在禁用统计数据的情况下构建的吗?   java在应用程序中使用常量   java无法使用AutoIT和Selenium Webdriver在所需位置/文件夹保存图像   java如何在jtable中更新jprogress栏   java是比较给定日期和当前日期(在给定时区中没有时间段)的最佳方法   安卓代码中的java错误   java无法访问实体类中的字段   java如何在tomcat中处理三个JDBC连接池?   java无法使用Spring Security保护AngularJS页面   如何在没有TCP/IP协议栈的情况下用Java发送以太帧