问题
我希望下面的脚本最多打印一个事件然后停止(它只是为了说明问题而编写的)。
#!/usr/bin/env python
from select import poll, POLLIN
filename = "test.tmp"
# make sure file exists
open(filename, "a").close()
file = open(filename, "r+")
p = poll()
p.register(file.fileno(), POLLIN)
while True:
events = p.poll(100)
for e in events:
print e
# Read data, so that the event goes away?
file.read()
但是,它每秒打印大约 70000 个事件。为什么?
背景
我编写了一个在内部使用pyudev.Monitor类的类。除其他外,它使用poll object 轮询由 fileno() 方法提供的 fileno 以进行更改。
现在我正在尝试为我的班级编写单元测试(我意识到我应该先编写单元测试,所以无需指出),因此我需要为我的班级编写自己的 fileno() 方法模拟 pyudev.Monitor 对象,我需要控制它,以便我可以触发 poll 对象报告事件。正如上面的代码所示,我不能让它停止报告看似不存在的事件!
我在民意调查类中找不到确认事件()或类似的东西来使事件消失(我怀疑只有一个事件以某种方式卡住了),搜索谷歌并且这个网站没有产生任何结果。我在 Ubuntu 10.10 上使用 python 2.6.6。