問題
以下のスクリプトは、最大で1つのイベントを出力してから停止することを期待していました(問題を説明するためだけに書かれています)。
#!/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()
ただし、1秒あたり約70000イベントを出力します。なんで?
バックグラウンド
pyudev.Monitorクラスを内部で使用するクラスを作成しました。特に、 pollオブジェクトを使用して変更についてfileno()メソッドによって提供されたfilenoをポーリングします。
今、クラスの単体テストを作成しようとしています(最初に単体テストを作成することになっているので、指摘する必要はありません)。したがって、独自のfileno()メソッドを作成する必要があります。 pyudev.Monitorオブジェクトをモックします。これを制御して、ポーリングオブジェクトをトリガーしてイベントを報告できるようにする必要があります。上記のコードが示すように、存在しないように見えるイベントの報告を停止することはできません。
ポーリングクラスでacknowledge_event()などを見つけることができず、イベントを終了させることができます(何らかの理由でスタックしているイベントが1つだけあると思われます)、googleを検索すると、このサイトは何も生成しませんでした。Ubuntu10.10でPython2.6.6を使用しています。