跳转到主要内容

A zc.monitor插件,用于测试函数是否挂起

项目描述

A zc.monitor插件,用于测试函数是否挂起

有时,计算会停止,很难找出原因。strace等工具可能会有所帮助,但它们非常低级。如果调用外部网络服务时挂起,您可能只能看到select或poll调用,而无法看到被调用的服务。

Isithanging提供了一个简单的注册表和辅助函数,用于注册和注销调用。为了说明这一点,我们将使用一个测试函数,该函数会阻塞,直到我们通过设置事件来取消阻塞它

>>> import zc.isithanging.tests
>>> event, blocker = zc.isithanging.tests.create_blocker()

阻塞函数仅返回它接收到的任何参数。

为了检查函数是否阻塞,我们使用zc.isinhanging.run来运行该函数。我们将在一个线程中这样做

>>> import zc.thread
>>> @zc.thread.Thread
... def thread():
...     print zc.isithanging.run(blocker, 1, foo=2)

还有一个装饰器可以包装一个函数并处理调用run

让我们创建更多任务

>>> e1, b1 = zc.isithanging.tests.create_blocker()
>>> suspect = zc.isithanging.suspect(b1)
>>> @zc.thread.Thread
... def t1():
...     print suspect(1)

在上面的代码中,我们使用suspect装饰器作为函数(而不是使用装饰器语法)。

>>> 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)

添加了“suspect”装饰器来装饰可能挂起的函数。

0.2.0 (2014-11-17)

(意外重新发布0.1。)

0.1.0 (2014-11-17)

初始发布

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解更多关于 安装软件包 的信息。

源分布

zc.isithanging-0.3.0.tar.gz (4.0 kB 查看哈希值)

上传于