[Python-de] select.epoll() vs async framework (PostgreSQL)

Achim Domma domma at procoders.net
Do Jan 18 15:31:29 EST 2018


On Thursday, 18 January, 2018 08:02 PM, Sven R. Kunze wrote:

> Den asyncio-Quellcode, den ich bisher immer zu Gesicht bekommen habe,
> involvierte ab einer bestimmten Komplexitätsgrenze stets Threads.
> Wo ich mich dann naturgemäßg wieder frage, ob ich da im falschen Film
> bin, wo doch gerne so über Threads geschimpft wird.
> 
> Das Ineinander-Stöpseln, was ich da erlebt habe, war dann mit so einer
> riesigen Menge Boilerplate verbunden, dass ich diese Implementierung
> nicht wirklich ernstnehmen konnte.

Würde ich nur solchen Code zu sehen bekommen, ginge es mir wohl wie dir.
Von daher kann ich jetzt zumindest deine "Begeisterung" für asyncio
verstehen. ;-)

> Natürlich ist es schön, nicht an unterster Ebenen festzuhängen, aber
> async und await sind jetzt nicht wirklich high-level und select nimmt
> einem mega viel Arbeit, die ich nicht programmieren möchte, ab.

Nein, async und await sind nicht unbedingt high-level, aber eine höhere
Abstraktion als select(). Ich für meinen Teil bin kein Experte in
Sockets, select, poll, ... Aus meiner Sicht sind async und await exakt
die richtige Abstraktion. Daß das Problem nicht vollständig versteckt
wird, liegt - zumindest meinem Verständnis nach - daran, daß es ganz
einfach nicht geht. Ich hab' Ansätze in Ruby (On Rails) gesehen, da
würdest du mit Freuden asnyc/await nehmen. ;-)

> Anderenfalls würde ich gerne hören, wie sich die asyncio-Gemeinde die
> Lösung des Zwei-Welten-Problems vorstellt. Zum Beispiel anhand von WSGI.

Meinst du mit Zwei-Welten-Problem das Problem, den Übergang von asnyc
Code zu sync bzw. umgekehrt? Exakt das löst async/await in meinen Augen
exakt so gut, wie es in Python auf Grund der Natur der Sprache eben
geht. Die zwei Welten sind nunmal unterschiedlich. Klar kannst du eine
Sprache wie Go (bezogen auf deine andere Nachricht) explizit für das
Szenario designen. Haskellcompiler können auch sehr coole Sachen machen.
Die Sprachen funktionieren aber auch anders.

Der Hauptkritikpunkt, den ich gelten lassen würde, ist, daß in den
meisten Beispielen eben exakt der Übergang ausgespart wird. Ich hab' mir
beim ersten mal auch den Wolf gesucht, bis ich die richtigen Funktionen
zur Hand hatte. Und um sie zu benutzen, muß man schon ein solides Bild
davon haben, was da passiert.

Nochmal mein Fazit: Ich halte async/await für die beste Abstraktion, die
in Python geht. Was dich nicht davon abhalten soll, irgendwas eigenes zu
bauen. In den meisten Fällen unterstelle ich aber, daß die Leute, die
sich damit auf die Nase legen, ihre Hausaufgaben nicht gemacht haben.

Grüße,
Achim


Mehr Informationen über die Mailingliste python-de