Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.python > #5069

[Python-de] asyncio (was: Re: select.epoll() vs async framework (PostgreSQL))

Path csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail
From Stefan Schwarzer <sschwarzer@sschwarzer.net>
Newsgroups de.comp.lang.python
Subject [Python-de] asyncio (was: Re: select.epoll() vs async framework (PostgreSQL))
Date Tue, 16 Jan 2018 08:00:29 +0100
Lines 78
Message-ID <mailman.75.1516086037.2620.python-de@python.org> (permalink)
References <29ce1adc-0fea-e23c-e321-858e0d52dc1c@thomas-guettler.de> <a1669a00-b66c-6cce-8546-570a857e77aa@behnel.de> <71ab86cc-0e21-da2f-9577-8b6ccbe707ba@thomas-guettler.de> <2915505E-9237-40C4-A2BF-A4A22D00A216@web.de> <04ab7b73-e182-081c-74c7-976e3eac9b84@mail.de> <a3efeeb7-3109-e01e-fe46-1fa032a06ba5@sschwarzer.net>
Mime-Version 1.0
Content-Type text/plain; charset=utf-8
Content-Transfer-Encoding 8bit
X-Trace news.uni-berlin.de KUJlFNDGAQy8l7f/DJqM6QWEriDfOmaS9Ed3oYKiE8Fg==
Return-Path <sschwarzer@sschwarzer.net>
X-Original-To python-de@python.org
Delivered-To python-de@mail.python.org
User-Agent Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.24) Gecko/20100411 Thunderbird/2.0.0.24 Mnenhy/0.7.6.666
In-Reply-To <04ab7b73-e182-081c-74c7-976e3eac9b84@mail.de>
Content-Language de-DE
X-Provags-ID V03:K0:PLGQkonZJwDxdb6JIETKU9kyDfIi6OUa6HgsNTHu+4ePjX4jG/s pKcb7H4uPxGzEQCQYHKTSZJ+WPukMRKylWBdbQqJtJCwH+V8V0haI7RuAOyiYukQkuH9N3T 4KStXXtuM3RyfMfjJo2KF7iMbrdJFXu0Ae62ev6LbNk4hN8t0DLDDkAF54VGtVMridx1F8l G0i0wkjiQMcdS2EbiV4Hw==
X-UI-Out-Filterresults notjunk:1;V01:K0:jYCGuZVajig=:un80ti7cc0kdJX9AoDQxh8 cbKycXPPs1zLG0WmJEVLmJgrjrVeIj7YDXx9sme5plBSkmV7sXiampVjnka4IF0mnPpNCX1W6 Pwc1cZEEbysEBMRG1dMQcBPadOrcopXx5dwx9J+Mqf4lk6ce84YvauzJ0gn5S1Z5fag8fUch6 DM+iAyTzjcCNMykRsymb0NhKXJCmyTi3gQAYTD/S+QxJUbKulh3Rg9PtzInkfv9f9zVUvCVEq QX31EvTKPAy9oODxrQ0NRSqOgHneiy0khZz2MG5UAUXTOcit/2nNw2g2NjfrnbfsV51T9qUmO HU7v9rkHg/fVxdXA2SIfQxBzT6mlIkVvMnt99McIQeI58bPiZQKEMq5Olv04OjhisPD8fAv60 epm0p+sWwuoDdJO3GQDAM/P8q0imXV0cf0KrGMbiwl7ScM2Rq0/aP7H5zmWx/cvUT5sRolDZG CB4v4xCgb6/aWtfhAAJ7INrDc7WGHM3afCW1ok5Ix5p3vhgM/ZgYpcXv/NOQzCXMJS1wCw0Ur oCnbs+t5A9nyJJlZ+4SkDej/oQpOBWMf1FMalFbISr5OWO3yCGgVbJdjr1UUvpqwPHWtaQLHQ 5v9RI6hgLCkS7ZNzsjt5aR8XbnT7Ho/2y/gnvHi1k7aTIIMMXYGgP8q30ZEJqFoTm4A6Lp+wa Y5Ibqubw33kagpTGqr3991LM3easeSvBhK1s9CuHPaGRi6zNOQdBI0Ejs9nfRb+g+KBfG0jm6 +Q0IxkpqI6XSJte4h0uiui8zFJQElbkVMj3Vj2corGB2sRnBaDf4CnCdsqA=
X-BeenThere python-de@python.org
X-Mailman-Version 2.1.25
Precedence list
List-Id Die Deutsche Python Mailingliste <python-de.python.org>
List-Unsubscribe <https://mail.python.org/mailman/options/python-de>, <mailto:python-de-request@python.org?subject=unsubscribe>
List-Archive <http://mail.python.org/pipermail/python-de/>
List-Post <mailto:python-de@python.org>
List-Help <mailto:python-de-request@python.org?subject=help>
List-Subscribe <https://mail.python.org/mailman/listinfo/python-de>, <mailto:python-de-request@python.org?subject=subscribe>
X-Mailman-Original-Message-ID <a3efeeb7-3109-e01e-fe46-1fa032a06ba5@sschwarzer.net>
X-Mailman-Original-References <29ce1adc-0fea-e23c-e321-858e0d52dc1c@thomas-guettler.de> <a1669a00-b66c-6cce-8546-570a857e77aa@behnel.de> <71ab86cc-0e21-da2f-9577-8b6ccbe707ba@thomas-guettler.de> <2915505E-9237-40C4-A2BF-A4A22D00A216@web.de> <04ab7b73-e182-081c-74c7-976e3eac9b84@mail.de>
Xref csiph.com de.comp.lang.python:5069

Show key headers only | View raw


On 2018-01-15 20:55, Sven R. Kunze wrote:
> On 15.01.2018 17:07, Diez B. Roggisch wrote:
>>> On 15. Jan 2018, at 16:46, Thomas Güttler <guettliml@thomas-guettler.de> wrote:
>>>
>>> Was ist aus deiner Sicht das, was alle nehmen?
>> Ich rate mal: asyncio. Die Chance, das du zB http-clients da einfach einpluggen kannst, und damit schon auf einem deutlich besseren Abstraktionsniveau unterwegs bist, als mit rohen Filedeskriptoren und epoll zu arbeiten laesst mich vermuten, dass es sich dabei um das Alufelgenrad handelt.
>>
>> Diez
> 
> Aus meiner Sicht gequilter Unsinn. asyncio is ein Nischenprodukt und 
> alle Welt verwendet File-Deskriptoren. Wunschdenken sollte nicht mit der 
> Realität verwechseln werden.

Disclaimer: Ich habe bisher keine praktische Erfahrung mit
Pythons asyncio-Framework, aber verstehe auf einem relativ
abstrakten Niveau, wie `async` und `await` verwendet werden.
Ich habe einige Erfahrung mit asynchronen Code in Twisted.

Ich bin auch eher skeptisch, was asyncio angeht:

- Ich finde die `async`s und `await`s im Code unübersichtlich.

- Man muss sehr aufpassen, dass man nicht versehentlich
  synchron laufenden Code dazwischen hat. Siehe zum Beispiel
  https://whatisjasongoldstein.com/writing/im-too-stupid-for-asyncio/
  In dem Fall funktioniert der Code zwar "im Prinzip" noch,
  aber die Nebenläufigkeit geht teilweise verloren.

- Durch mehrere Anläufe zu einer asyncio-API in Python ist
  die Sammlung dieser APIs sehr unübersichtlich geworden,
  siehe auch
  http://lucumr.pocoo.org/2016/10/30/i-dont-understand-asyncio/

- Es ist hakelig, synchronen Code in einem asynchronen
  Kontext zu verwenden und umgekehrt.

- Ich vermute, dass das Nachdenken über solchen Code und vor
  allem das Debuggen kein Vergnügen ist.

  Wie sind da eure Erfahrungen?

_Je nach Anwendungsfall_ gibt es diverse Alternativen. Mir
fallen spontan ein:

- `concurrent.futures`, quasi ein Pool von Threads oder
  Prozessen, aber mit einer nützlichen API zum Zugriff
  auf die Ergebnisse.
  https://docs.python.org/3/library/concurrent.futures.html

- Worker-Threads, die über Queues kommunizieren. Keine
  Objekte aus keinem Thread verändern, wenn sie erst mal
  in einer Queue sind oder waren! Das gilt analog auch für
  Shared State mit dem Threadpool-Executor aus
  `concurrent.futures`.

- "Kleine" Prozesse, die über einen Broker (zum Beispiel
  RabbitMQ) kommunizieren. Diese Prozesse entsprechen in
  etwa den Worker-Threads aus dem vorherigen Punkt.

Mit den ersten beiden Ansätzen habe ich selbst gearbeitet,
den dritten Ansatz habe ich in einem Projekt, in dem ich
mitgearbeitet habe, im Einsatz gesehen.

Was fällt euch an weiteren Ansätzen ein?

Natürlich hat man immer noch die grundlegenden Probleme
von Nebenläufigkeit, aber mir gefällt, dass hier die
"Bausteine" aus relativ viel synchronem Code bestehen,
der sich größtenteils getrennt testen und debuggen lässt.

Was man aus meiner Sicht möglichst vermeiden sollte, ist,
mit Low-Level-APIs zu hantieren, siehe auch
https://www2.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-1.pdf
Das ist ein alter Artikel, der aber meiner Meinung nach
die Tücken solcher APIs nach wie vor gut erläutert.

Viele Grüße
Stefan

Back to de.comp.lang.python | Previous | Next | Find similar


Thread

[Python-de] asyncio (was: Re: select.epoll() vs async framework (PostgreSQL)) Stefan Schwarzer <sschwarzer@sschwarzer.net> - 2018-01-16 08:00 +0100

csiph-web