私は以下のスクリプトは、多くても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()
ただし、約70000イベント/秒を出力します。どうして?
背景
私は内部pyudev.Monitorクラスを使用するクラスを書きました。とりわけ、poll objectを使用してfileno()メソッドによって提供されたfilenoを変更するかどうかをポーリングします。
私はクラスの単体テストを書こうとしています(単体テストを書くことになっているので、それを指摘する必要はありません)ので、自分のファイルを書く必要があります私のモックpyudev.Monitorオブジェクトのために、私はイベントを報告するためにポーリングオブジェクトをトリガーできるようにそれを制御する必要があります。上記のコードが示すように、私はそれが一見存在しないイベントを報告するのを止めることはできません!
私はpollクラスでは、イベントを消してもらえません(私は何とか止まっているイベントが1つしかないと思われます)、Googleを検索してこのサイトに何も表示されていません。私はUbuntu 10.10でPython 2.6.6を使用しています。