Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.lang.python > #5097
| Path | csiph.com!news.redatomik.org!fu-berlin.de!uni-berlin.de!not-for-mail |
|---|---|
| From | Stefan Behnel <python-de@behnel.de> |
| Newsgroups | de.comp.lang.python |
| Subject | Re: [Python-de] select.epoll() vs async framework (PostgreSQL) |
| Date | Fri, 19 Jan 2018 11:17:44 +0100 |
| Lines | 93 |
| Message-ID | <mailman.148.1516357073.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> <d1a40b67-1a37-7164-f980-85d473a0838e@behnel.de> <9ce770aa-b6dd-f709-1a95-f1e02f82f7f6@mail.de> <bc8618a5-2ffc-46eb-72a4-afa12ddc030d@behnel.de> <374d8f30-d5ec-a097-6bd0-ce15fc0d824e@mail.de> <fea78855-045d-377b-5acd-75de5dab4d18@behnel.de> |
| Mime-Version | 1.0 |
| Content-Type | text/plain; charset=utf-8 |
| Content-Transfer-Encoding | 8bit |
| X-Trace | news.uni-berlin.de /RGN4TZODzYkbYPVF0J/FQDQ3OyrEfE09cOBQg1tSQsg== |
| Return-Path | <python-de@behnel.de> |
| X-Original-To | python-de@python.org |
| Delivered-To | python-de@mail.python.org |
| DKIM-Signature | v=1; a=rsa-sha256; c=relaxed/relaxed; t=1516357066; s=strato-dkim-0002; d=behnel.de; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:Date:Message-ID: From:References:To:Subject:X-RZG-CLASS-ID:X-RZG-AUTH; bh=EQ+/ljyvj9UfloP0vHdpUN15+F3V1ftPR5PgECdBVNc=; b=gDtUSgW4N9DdAnbZlPp/0fn7/2dVUrxmDrhzrtgNZ4pNXQ54ZHBQZ3AGKIXGupQTZZ ncyEZEyRWr7L96gnN6E4dmjzcrgvo/4FM6Pp6rHhQlN0/uqCMsCXiw5/sQOKoAaHaPiM PhR1NYlSn8afgFnIdrbfRQIO9BKyVsXLb+6yOoN7mASCIug6xFnukTwPVqXV+QSuhTJC Fu8Ol0Ti2BtlUgAnTpylnCkWJ955KUY8ycP5flMncEkgvCWZ+3M/pZgdyoyt/qgnHUpY rXEjJZ3iNRSiZ+rGF9PdGDTDclfmEt1xZO30/XvV8MkDyjEK/W9+t407sEvSggCR6f6d 1AuA== |
| X-RZG-AUTH | :E1MMdFW4b++AXZOTwA41DOYM0Dv9LNWvavC/fJZ6Wfgmp/Lh1ANWCRaaq2R1hCooD/t2Vl9QPVeBUNbEes6Rl1idG4gud7BD4hV37e0/2ZHKlCEy |
| X-RZG-CLASS-ID | mo00 |
| User-Agent | Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 |
| In-Reply-To | <374d8f30-d5ec-a097-6bd0-ce15fc0d824e@mail.de> |
| Content-Language | de-DE |
| 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 | <fea78855-045d-377b-5acd-75de5dab4d18@behnel.de> |
| 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> <d1a40b67-1a37-7164-f980-85d473a0838e@behnel.de> <9ce770aa-b6dd-f709-1a95-f1e02f82f7f6@mail.de> <bc8618a5-2ffc-46eb-72a4-afa12ddc030d@behnel.de> <374d8f30-d5ec-a097-6bd0-ce15fc0d824e@mail.de> |
| Xref | csiph.com de.comp.lang.python:5097 |
Show key headers only | View raw
Sven R. Kunze schrieb am 18.01.2018 um 20:02: > On 17.01.2018 22:49, Stefan Behnel wrote: >> Und anstatt meinen Code speziell für asyncio zu schreiben, ist es dann >> besser, ihn speziell für select() zu schreiben? Der "Vorteil" erschließt >> sich mir absolut nicht. Bei asyncio brauche ich den meisten Code *gar >> nicht* zu schreiben, weil es für fast alles schon fertige Tools und >> Bibliotheken gibt, die ich dank der allgemeinen Schnittstelle einfach >> ineinander stöpseln kann. > > Sprichst du aus eigener Erfahrung? Ja. Aber interessant, dass du es für nötig erachtest, explizit nachzufragen. > Jemand anderes im Thread hatte nach > genau solcher Erfahrung gefragt. Für mich liest sich das, was du da > schreibst, leider immer noch nach einer Wiederholung des Marketings. Was ja im eklatanten Gegensatz zu deinen eigenen Kommentaren steht. ;) > 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. Threads können genau zwei Dinge gut: 1) parallele Berechnung unabhängiger Daten, also trivial-parallelen Code ausführen, und 2) nichts tun, z.B. indem sie (im Rahmen vorhandener Ressourcen) auf I/O warten. Alles andere führt ziemlich schnell zu Komplexitätsexplosion und sinkender Effizienz. Daraus folgt: es ist nichts dagegen einzuwenden, Threads sinnvoll einzusetzen, nämlich genau in den Bereichen, die sie gut abdecken. Insbesondere bieten Thread-Pools eine gute (und simple) Möglichkeit, synchrone Tools in die async-Welt zu integrieren, z.B. synchrone Datenbanktreiber und SQLAlchemy, weil die Threads sich dort eben genau auf's Nichtstun und unabhängige Datenverarbeitung beschränken lassen. > 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. Für mich war es eher nur Show-Case anstelle > einer Implementierung mit Mehrwert. Da wäre ich jetzt wirklich interessiert > an realem Beispielen. Um beim Beispiel zu bleiben, SQLAlchemy lässt sich mit ca. 10-20 Zeilen leicht lesbarem Code mit Hilfe eines Thread-Pools in async-Frameworks integrieren. Dann rufst du statt "query.all()" eben "await background_query(query.all)" auf, und schon blockiert's nicht mehr und erlaubt gleichzeitig 'unbegrenzten' I/O-Durchsatz. Empfinde ich jetzt noch nicht als "riesige Menge Boilerplate", und funktioniert auch mit etlichen anderen thread-sicheren synchronen APIs. > Dennoch, die Problempunkte, die ich und viele andere immer wieder > anbringen, werden auch hier nicht wirklich entkräftet und du gehst nicht > ansatzweise darauf. Na ja, selektiver Wahrnehmung ist eben schwer mit Argumenten zu begegnen. Wenn es deine Meinung ist, dass asyncio der Teufel ist und alle anderen schlicht nicht genug Erfahrung haben und im Zweifel nur noch nicht die richtigen (furchtbaren) Code-Beispiele gesehen haben, die dich doch längst in deiner Meinung verfestigt haben, dann helfen Argumente nur bedingt. Klingt jetzt nach Ad-Hominem, ist mir klar, aber eigentlich beschreibt es nur die Art, wie deine "Argumentation" in diesem Thread auf mich wirkt. > Solange wir nur auf dem Niveau "meins ist besser" argumentieren, können wir > hier auch aufhören. > 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. Du solltest die Möglichkeit in Erwägung ziehen, dass das vielleicht einfach gar kein "Problem" ist, das eine "Lösung" erfordert. Das Neuschreiben von Tools für async ist eigentlich nie ein Zwang, sondern entweder eine Optimierung bestehender (sync-)Möglichkeiten, oder ein "cooles Projekt in der Freizeit", oder irgendwas anderes, was Leute eben machen *wollen*. So ist das halt bei OpenSource, niemand hält einen davon ab, das 5254. Template-System zu schreiben, oder die 22. Neuimplementierung von Python, "weil's ja so einfach ist" und "ich das viel besser kann als alle anderen", oder weil ich vielleicht einfach etwas dabei lernen möchte. Genauso hält einen niemand davon ab, ein cooles neues async-Tool zu schreiben, obwohl es das alles "ja schon längst gibt". Leb einfach damit, dass andere Leute Dinge machen, weil sie sie machen wollen, und nicht, weil du der Meinung bist, dass sie sinnvoll sind. Andere Menschen haben andere Anforderungen und andere Vorstellungen davon, was "sinnvoll" oder "cool" ist. Es gibt auch genug Leute, die aus voller Überzeugung Java verwenden, weil's "cool" ist. Kann man so oder so dazu stehen. Stefan
Back to de.comp.lang.python | Previous | Next | Find similar
Re: [Python-de] select.epoll() vs async framework (PostgreSQL) Stefan Behnel <python-de@behnel.de> - 2018-01-19 11:17 +0100
csiph-web