Как работает опрос файла на наличие изменений?

Проблема

Я ожидал, что приведенный ниже сценарий будет напечатан максимум на одном событии, а затем остановится (он написан только для иллюстрации проблемы).

#!/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 событий в секунду. Почему?

Background

Я написал класс, использующий pyudev. Внутренний класс Monitor. Среди прочего, он опрашивает fileno, предоставленный методом fileno(), на наличие изменений с помощью объекта опроса .

Теперь я пытаюсь написать модульный тест для своего класса (я понимаю, что должен сначала написать модульный тест, поэтому нет необходимости указывать на него), и поэтому мне нужно написать свой собственный метод fileno() для моего макета pyudev. Объект мониторинга,и мне нужно контролировать его, чтобы я мог инициировать объект опроса, чтобы сообщить о событии. Как показывает приведенный выше код, я не могу заставить его перестать сообщать о, казалось бы, несуществующих событиях!

Я не могу найти acknowledge_event() или подобного в классе опроса, чтобы событие исчезло (я подозреваю, что есть только одно событие, которое каким-то образом застряло), поиск в Google, и этот сайт ничего не дал. Я использую python 2.6.6 на Ubuntu 10.10.

6
задан Lauritz V. Thaulow 24 January 2011 в 14:29
поделиться