36 Stimmen

Eventlet oder gevent oder Stackless + Twisted, Pylons, Django und SQL Alchemy

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?

28voto

Denis Punkte 3730

Das könnte Sie interessieren:

Eventlet und gevent sind nicht wirklich mit Stackless vergleichbar, da Stackless mit einer Standardbibliothek ausgeliefert wird, die Tasklets nicht kennt. Es gibt Implementierungen von Steckdose für Stackless aber es gibt nichts, was so umfassend ist wie gevent.monkey . CCP verwendet kein reines Stackless, sondern etwas namens Stackless I/O, das AFAIK zufolge nur für Windows verfügbar ist und nie als Open Source veröffentlicht wurde (?).

Sowohl eventlet als auch gevent könnten auf Stackless statt auf greenlet laufen. An einem bestimmten Punkt haben wir sogar versucht, dies als GSoC-Projekt fand aber keinen Studenten.

4voto

fijal Punkte 3140

Um einen Teil Ihrer Frage zu beantworten - wenn Sie sich http://speed.pypy.org werden Sie sehen, dass die Verwendung von Twisted auf PyPy Mai einige Beschleunigungseffekte. Das hängt natürlich von Ihrer Arbeitsbelastung ab, aber es lohnt sich wahrscheinlich, das zu prüfen.

Zum Wohl,
fijal

0voto

Ben Ford Punkte 2107

Ich habe eine kleine Echtzeit-Web-App auf der Grundlage von eventlet und repoze.bfg gebaut (ich habe django vor einiger Zeit aufgegeben). Ich habe festgestellt, dass eventlet und monkey Parcheando genau so einfach sind, wie Ted sagt.

0voto

Robert Zaremba Punkte 7318

Gevent ist kein reines Python, und es hängt stark von CPython ab. Von den von Ihnen erwähnten Web-Frameworks Eventlet (OpenStack) und Tornado (FriendsFeed, Quora) hat den größten Einsatz.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X