Problem
Spodziewałem się, że poniższy skrypt wydrukuje maksymalnie jedno zdarzenie, a następnie zatrzyma się (jest napisane tylko w celu zilustrowania problemu).Jak działa odpytywanie pliku pod kątem zmian?
#!/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()
Jednak drukuje około 70000 zdarzeń na sekundę. Czemu?
Tło
Pisałem klasy, która używa klasy pyudev.Monitor wewnętrznie. Między innymi, sonduje fileno dostarczone przez metodę fileno() zmian za pomocą poll object.
Teraz próbuję napisać test jednostkowy dla mojej klasy (zdaję sobie sprawę, że mam najpierw napisać test jednostkowy, więc nie muszę tego zaznaczać) i dlatego muszę napisać własne filogeniczne () dla mojego próbnego obiektu pyudev.Monitor i muszę go kontrolować, aby móc wywołać obiekt ankiety, aby zgłosić zdarzenie. Jak pokazuje powyższy kod, nie mogę przestać zgłaszać pozornie nieistniejących zdarzeń!
Nie mogę znaleźć żadnego potwierdzenia() lub podobnego w klasie odpytywania, aby zdarzenie zostało przerwane (podejrzewam, że jest tylko jedno zdarzenie, które utknęło w jakiś sposób), wyszukując google i ta strona niczego nie dała. Używam Pythona 2.6.6 na Ubuntu 10.10.