Я ожидал, что приведенный ниже сценарий будет напечатан максимум на одном событии, а затем остановится (он написан только для иллюстрации проблемы).
#!/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. Среди прочего, он опрашивает fileno, предоставленный методом fileno(), на наличие изменений с помощью объекта опроса .
Теперь я пытаюсь написать модульный тест для своего класса (я понимаю, что должен сначала написать модульный тест, поэтому нет необходимости указывать на него), и поэтому мне нужно написать свой собственный метод fileno() для моего макета pyudev. Объект мониторинга,и мне нужно контролировать его, чтобы я мог инициировать объект опроса, чтобы сообщить о событии. Как показывает приведенный выше код, я не могу заставить его перестать сообщать о, казалось бы, несуществующих событиях!
Я не могу найти acknowledge_event() или подобного в классе опроса, чтобы событие исчезло (я подозреваю, что есть только одно событие, которое каким-то образом застряло), поиск в Google, и этот сайт ничего не дал. Я использую python 2.6.6 на Ubuntu 10.10.