Ich möchte select.epoll () in meiner Python-Bibliothek verwenden.
Leider ist epoll nicht überall verfügbar.
Ich brauche eine Möglichkeit, auf select.select () zurückzugreifen.
Ich habe versucht, bei pypi etwas zu finden, habe aber kein passendes Paket gefunden: Ссылка
Wie kann ich diesen "Fallback von epoll lösen, um zu wählen, ob epoll nicht verfügbar ist"?
In Python 3.4 wurde das Modul Selektoren eingeführt. Es bietet eine DefaultSelector
, die ein Alias für die "effizienteste Implementierung auf der aktuellen Plattform" ist.
Hier ist ein kurzes Anwendungsbeispiel:
%Vor%Sie können ein vollständiges Beispiel zur Python-Dokumentation finden .
DefaultSelector
versucht in dieser Reihenfolge:
epool
(Linux), kqueue
(FreeBSD / NetBSD / OpenBSD / OS X) oder /dev/poll
(Solaris) poll
(Unix) select
Wie wäre es libevent mit der alle Mechanismen Polling wickelt und fällt zurück auf die beste verfügbare Variante basiert auf Ihrer Plattform libevent.org
Hier sind meine zwei Cent. Laut Dokumentation ist epoll nur unter Linux 2.5.44 und höher verfügbar. Mit Code:
%Vor%Besser noch, ich schätze, dass das obige in einen netten Dekorateur verwandelt werden könnte, der überall dort verwendet werden kann, wo Sie wollen, und der die korrekte Funktion abhängig vom zugrunde liegenden Betriebssystem zurückgibt.
Tags und Links python select python-asyncio epoll