Python: Lib um epoll zu verwenden falls verfügbar, fallback um auszuwählen

8

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"?

    
guettli 11.01.2018, 09:15
quelle

4 Antworten

4

Abgesehen von selectors stdlib würde ich mit uvloop gehen, das auf libuv in erstellt wurde Cython. Vergleichen Sie mit libevent / libev , diese beiden haben keine Python-Bindung aktiv gepflegt, uvloop ist vielversprechender.

    
georgexsh 16.01.2018, 11:24
quelle
8

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
Andrea Corbellini 11.01.2018 10:13
quelle
3

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

    
Akhil Thayyil 11.01.2018 16:37
quelle
2

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.

    
kingJulian 16.01.2018 12:02
quelle