Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.python > #5078
| 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
Re: [Python-de] asyncio Stefan Schwarzer <sschwarzer@sschwarzer.net> - 2018-01-17 08:16 +0100
csiph-web