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


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

Re: [Python-de] asyncio

Path csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail
From Stefan Schwarzer <sschwarzer@sschwarzer.net>
Newsgroups de.comp.lang.python
Subject Re: [Python-de] asyncio
Date Wed, 17 Jan 2018 08:16:55 +0100
Lines 76
Message-ID <mailman.101.1516173423.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> <06D46350-4200-4E97-AB08-25F727F79A1A@web.de> <6ca887c8-e228-ee0e-e6c5-74c1ea574ab8@sschwarzer.net>
Mime-Version 1.0
Content-Type text/plain; charset=utf-8
Content-Transfer-Encoding 8bit
X-Trace news.uni-berlin.de G9X1HBB/7fIvt6MmZhzfaAzdRFCpOrWa3doDGGZhkuHw==
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 <06D46350-4200-4E97-AB08-25F727F79A1A@web.de>
Content-Language de-DE
X-Provags-ID V03:K0:CHJLfLHGBx/22npYi0QojcfFNhqeWRvRcY1tK1HfUSAyicLid8+ akexB0ELy/VKQv5iuBq4Y9vHRWRxTXFe7NUHhJKkZ8YzQ/5jH3ogHlnuF41v9g0SBYXaSMa PpaxSlH3oYzfKjm938cUEDgO/n797d5YvbP4AEOSHNc69FTTn6U8kv03HkB6pn6hInzOQQG PfMMTNV8PLX96I/VsVJ3A==
X-UI-Out-Filterresults notjunk:1;V01:K0:XVJRzma5RiA=:Bw9kPilLsGsJs50sB9FVbu 2iNUDtIEL7xiblZYHSLOc6GiclCX71AWXr4a5DGvQVTjvPig0BgzL+ldTLUncY/65cyfbIidz j/gzsSg+HCjbAxuTCJsnDKxpPM6UDBetwUMJ8vOIiiAHVJbN+Yafeb9bYvIinsjGO9FS7MDwU OI+V/zWxjq9DE/g8IzYegBZDIiG8lorzSEkWz3/WLJo35AZTeQlqJNm/FqkWI7Ad0xd18HwIO M0R+lgkopcMhDEPcUrptpuxueUxhylHNELr8qPf5CrBZsZXBZMlsKpryoKWDNm1bANwW6Ci/W iGrI8OI7CL1u8/lHw/5U6dyME4+KFjU2PdGtngV6L851e4WeYBwh5PSflXs3MIFdIBtySWxsl ioBLx1SGyrJe0ETDGkwe/i2zxv5w7ICEBnKIirHcXesFEi6H7SiQbM/8wrcY9rSy2cDZ86G2y GPByZ98FTB4wmyKgf76NQ9Biynb4ZT8WtmG7S2KL+OcNUfJ0LgmyjtSlqZUyPzzoNXYG9AcKn mtyeH3Cw0Wzx2gfW/DwtN12gH28J1TDq2wYPnAFE+lz9f2aKskha7q/JLT4KqZTcQiEteDeck Wt8bAy6q8qrpuI8NOrd1L2pqRjqnY2ClpKpz0VzgYsAEhAUL304sKocFRJTuYzrsKiuG3jV/P 5mj+YQPmNAef9KJYCRNMF1/lbesCzslbqQKioQB+HL6J9Aa4dI3Envo71tPkcz0v41fZlX/CY y3fzDmJ8+VTXpvm/ht/6i0UOcrjuEoezshEyXUbkQzH7J+USjQVArUC6ULs=
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 <6ca887c8-e228-ee0e-e6c5-74c1ea574ab8@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> <a3efeeb7-3109-e01e-fe46-1fa032a06ba5@sschwarzer.net> <06D46350-4200-4E97-AB08-25F727F79A1A@web.de>
Xref csiph.com de.comp.lang.python:5078

Show key headers only | View raw


On 2018-01-16 22:47, Diez B. Roggisch wrote:>> Am 16.01.2018 um 08:00 schrieb Stefan Schwarzer <sschwarzer@sschwarzer.net>:
>> - 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.
>
> Ist ein Bug. Ich halte das im Vergleich zu Races in MT Umgebungen nicht für schlimmer.

Ich glaube, hier spielt sehr stark mit rein, wie gut man (in
beiden Fällen) den Code verstehen und die Bugs vermeiden
oder beheben kann. Die "Gelegenheiten" für Race Conditions
sind  in Multithread- oder Multiprozess-basiertem Code sicher
häufiger und subtiler.

Race Conditions und Deadlocks kann man auch in asyncio-
Programmen haben, je nachdem ob/wie die nebenläufigen
Programmteile voneinander abhängen.

>> - 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?
>
> Threaded Code ist da ja auch notorisch schwierig. Bestimmte Races verschwinden schon, wenn man nur Print statements oder anderes Logging einbaut. Etc.

Das stimmt. Mich würden allerdings eher Erfahrungen mit
asyncio-Code interessieren, nicht mit multithreaded Code.
:-)

>> _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
>
> Wo genau der Unterschied zwischen einem Executor und einem Mainloop ist, insbesondere wenn man bei den Futures eine completion callback angibt, ist kaum erkennbar.

Ich vermeide Callbacks bei Futures (und auch sonst), wenn es
geht. Was ich dagegen sehr mag, ist der `as_completed`-Iterator,
https://docs.python.org/3/library/concurrent.futures.html#concurrent.futures.as_completed
Ich denke, diese vielleicht unscheinbare Funktion macht viel
für die "User Experience" aus.

> Die Frage ist meines Erachtens, ob die eingeführten Sprachkonstrukte es erlauben klareren Code zu schreiben, als das asynchrone Paradigma vorher mit callbacks und deferrables erfordert hat. Finde ich, ja.

Ich würde asyncio-Code ziemlich sicher Callback-basiertem
Code vorziehen. Aber der Punkt ist ja, ob bzw. unter welchen
Umständen es außer "asyncio mit Callbacks" und "asyncio mit
`async`/`await`" welche Alternativen gibt.

> Und den Wert asynchroner Programmierung bezüglich Skalierung und Resourcenverbrauch belegen Server wie NGINX.

Dass das prinzipiell funktioniert, ist klar. Die Frage ist
halt, wann ist es der "beste" Ansatz?

Ich glaube, mich persönlich stört am meisten, dass man
synchron geschriebenen Code und mit `async`/`await`
geschriebenen Code nicht gut verbinden kann. Beziehungsweise
das sieht immer irgendwie zusammengefrickelt aus.

Für mich sieht `async`/`await`-Code in Python quasi wie eine
andere Programmiersprache aus.

Viele Grüße
Stefan

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


Thread

Re: [Python-de] asyncio Stefan Schwarzer <sschwarzer@sschwarzer.net> - 2018-01-17 08:16 +0100

csiph-web