Wir verwenden Twisted ausgiebig für Anwendungen, die viel asynchrones Io benötigen. Es gibt einige Fälle, in denen Dinge stattdessen an die CPU gebunden sind, und dafür erzeugen wir einen Pool von Prozessen, um die Arbeit zu erledigen, und haben ein System für die Verwaltung dieser Prozesse über mehrere Server hinweg - alles in Twisted erledigt. Funktioniert prima. Das Problem ist, dass es schwierig ist, neue Teammitglieder auf den neuesten Stand zu bringen. Das Schreiben von asynchronem Code in Twisted erfordert eine nahezu vertikale Lernkurve. Es ist, als ob Menschen nicht auf natürliche Weise so denken.
Wir erwägen vielleicht einen gemischten Ansatz. Vielleicht behalten wir den xmlrpc-Serverteil und die Prozessverwaltung in Twisted und implementieren den anderen Kram in Code, der zumindest bis zu einem gewissen Grad synchron aussieht, obwohl er es nicht ist. Andererseits ziehe ich expliziten Code impliziten vor, also muss ich darüber noch ein wenig nachdenken. Wie auch immer, zu den Greenlets - wie gut funktioniert das Zeug? Es gibt also Stackless, und wie man an meinem gallentischen Avatar sehen kann, weiß ich aus erster Hand über den enormen Erfolg, den es in CCPs Flaggschiff EVE Online hat. Was ist mit Eventlet oder gevent? Nun, im Moment funktioniert nur Eventlet mit Twisted. Allerdings behauptet gevent, schneller zu sein, da es keine reine Python-Implementierung ist, sondern stattdessen auf libevent aufbaut. Es behauptet auch, dass es weniger Eigenheiten und Fehler hat. gevent Soweit ich weiß, wird sie von einem Mann gewartet. Das macht mich etwas misstrauisch, aber alle großen Projekte fangen so an, also... Dann ist da noch PyPy - Ich habe den Artikel noch nicht einmal zu Ende gelesen - ich habe ihn erst in diesem Thread gesehen: Nachteile von Stackless .
So verwirrend - ich frage mich, was zum Teufel zu tun - klingt wie Eventlet ist wahrscheinlich die beste Wette, aber ist es wirklich stabil genug? Hat irgendjemand da draußen Erfahrung damit? Sollten wir stattdessen mit Stackless arbeiten, da es schon länger existiert und eine bewährte Technologie ist - genau wie Twisted auch - und sie arbeiten gut zusammen. Aber trotzdem hasse ich es, eine separate Version von Python zu haben, um dies zu tun. was zu tun....
Dieser etwas anstößige Blogeintrag hat für mich jedoch den Nagel auf den Kopf getroffen: Asynchrone IO für Erwachsene Ich verstehe nicht die Twisted ist wie Java Bemerkung als mir Java ist in der Regel, wo Sie in der Threading-Mentalität sind, aber was auch immer. Trotzdem, wenn dieses Affenpatch-Ding wirklich genau so funktioniert, dann wow. Einfach nur wow!
0 Stimmen
Können Sie näher erläutern, was Sie damit meinen, daß MySQL nicht für OLTP geeignet ist?
0 Stimmen
Ich habe das herausgenommen, da es für den Rest des Artikels nicht relevant war. Aber was es schlecht macht, ist, miserable Unterstützung für Ansichten, langsame Trigger und gespeicherte Prozeduren, eine eher primitive Abfrage-Optimierer und schwer zu entziffern / nicht genug Informationen für Abfrage-Pläne (keine Pläne verfügbar für Updates / Löschungen / Einfügungen entweder). Erfordert Indizes für alle Fremdschlüsselspalten, was oft zu so vielen nutzlosen Indizes führt, dass man am Ende einfach gar keine Fremdschlüssel implementieren muss, um eine starke Leistungsverschlechterung zu vermeiden. Ich könnte immer so weitermachen...
0 Stimmen
Twisted ist eine der die die bekanntesten Python-Bibliotheken. Wie würde der Wechsel zu weitaus obskureren Projekten jemandem helfen, schneller "auf Touren" zu kommen?
0 Stimmen
Es heißt nicht umsonst "verdreht" :) Das Schreiben von callback-basiertem Code ist eine extrem verwirrende Erfahrung und fühlt sich für die meisten Entwickler, die es gewohnt sind, synchronen Code zu schreiben und zu denken, verworren an. Wenn Sie eine Bibliothek schreiben, die sowohl in einer threaded Server-Umgebung wie Pylons als auch in einer asynchronen und typischerweise nicht-threaded Umgebung funktionieren soll (es sei denn, Sie haben CPU-gebundenen Code, den Sie auf einen Thread verschieben, oder Code, der auf eine Datenbankschnittstelle zugreift, die blockiert - was so ziemlich alle tun), ist es keine offensichtliche Aufgabe zu lösen.
1 Stimmen
Warum sind Rückrufe ein Problem mit Twisted? Tut nicht
@inlineCallbacks
das Problem der Rückrufe lösen, die den Code verwirren?1 Stimmen
+1 bis
@inlineCallbacks
. Das ist die Antwort auf menschliche Probleme. Aber stellen Sie sicher, dass Ihre Kinder die Generatoren zuerst verstehen, sonst werden sie es nie begreifen.