2010-06-15 2 views
36

Wir verwenden Twisted extensiv für Anwendungen, die eine große Menge an asynchronem io benötigen. Es gibt einige Fälle, in denen stuff cpu gebunden ist, und dafür erzeugen wir einen Pool von Prozessen, um die Arbeit zu erledigen und haben ein System, um diese auch auf mehreren Servern zu verwalten - alles in Twisted. Funktioniert super. 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 so, als würden die Menschen nicht so natürlich denken.Eventlet oder gevent oder Stackless + Twisted, Pylons, Django und SQL Alchemy

Wir denken vielleicht über einen gemischten Ansatz nach. Vielleicht halten Sie den xmlrpc Server Teil und Prozess-Management in Twisted und implementieren Sie die anderen Sachen in Code, der zumindest teilweise synchron aussieht, während es nicht so ist. Dann wiederum mag ich explizit über implizit, also muss ich darüber ein bisschen mehr nachdenken. Auf jeden Fall auf Greenlets - wie gut funktioniert das Zeug? Da ist also Stackless und wie ihr von meinem Gallente-Avatar sehen könnt, ist mir der enorme Erfolg bei der Verwendung von CCPs Flaggschiff EVE Online aus erster Hand bewusst. Was ist mit Eventlet oder gevent? Nun, nur das Eventlet funktioniert mit Twisted. Gevent behauptet jedoch, schneller zu sein, da es keine reine Python-Implementierung ist, sondern stattdessen auf Libevent setzt. Es behauptet auch, weniger Idiosynkrasien und Defekte zu haben. gevent Es wird von 1 Kerl so weit wie ich sagen kann. Das macht mich etwas misstrauisch, aber alle großen Projekte beginnen auf diese Weise ... Dann gibt es PyPy - ich habe noch nicht einmal darüber gelesen - habe es nur in diesem Thread gesehen: Drawbacks of 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? Jemand da draußen hat Erfahrung damit? Sollten wir stattdessen mit Stackless gehen und es ist bewährte Technologie - genau wie Twisted - und sie funktionieren gut zusammen. Aber ich hasse es immer noch, eine separate Version von Python zu haben, um das zu tun. was zu tun ....

Dieser etwas anstößige Blog-Eintrag traf den Nagel auf den Kopf für mich obwohl: Asynchronous IO for Grownups Ich bekomme nicht die Twisted ist wie Java Bemerkung zu mir Java ist in der Regel, wo Sie in der Geisteshaltung, aber was auch immer. Aber wenn das Affe-Patch-Ding wirklich so funktioniert, dann wow. Einfach wow!

+0

Können Sie weiter kommentieren, was Sie meinen, dass MySQL nicht gut für OLTP ist? –

+0

Ich nahm das heraus, da es für den Rest des Artikels nicht relevant war. Aber was es schlecht macht, ist die abgrundtiefe Unterstützung für Sichten, langsame Trigger und gespeicherte Prozeduren, ein eher primitiver Abfrageoptimierer und schwer zu entziffernde/nicht genügend Informationen für Abfragepläne (keine Pläne für Aktualisierungen/Löschungen/Einfügungen verfügbar). Erfordert Indizes für alle Fremdschlüsselspalten, die häufig zu so vielen nutzlosen Indizes führen, dass Sie schließlich gar keine Fremdschlüssel implementieren müssen, um schwerwiegende Leistungseinbußen zu vermeiden. Ich könnte fortfahren ... – Khorkrak

+0

Twisted ist eine der bekanntesten Python-Bibliotheken. Wie würde der Wechsel zu weitaus obskureren Projekten dazu beitragen, dass jemand schneller "auf Touren kommt"? –

Antwort

28

Vielleicht möchten, um überprüfen:

Eventlet und GEVENT sind nicht wirklich vergleichbar mit Stackless, weil Stackless Schiffe mit einer Standard-Bibliothek, die nicht bekannt ist Tasklets. Es gibt Implementierungen von socket for Stackless, aber es gibt nichts so umfassendes wie gevent.monkey. CCP verwendet keine Stapel Stackless, es hat etwas namens Stackless I/O, die AFAIK ist nur Windows und wurde nie Open Source (?).

Sowohl Eventlet als auch Gevent konnten auf Stackless statt auf Greenlet ausgeführt werden. Irgendwann haben wir sogar versucht, dies als GSoC project zu tun, aber haben keinen Schüler gefunden.

+0

Vielen Dank Denis - Ich habe bereits den Vergleich von gevent mit eventlet gelesen, aber die Berichte von Benutzern, die von twisted oder eventlet zu gevent gewechselt sind, waren aufschlussreich. – Khorkrak

+1

@Khorkrak Es ist ein halbes Jahr her, seit du diese Frage gestellt hast. Ich habe mich gefragt, ob du deine Erfahrung seither teilen könntest. Was hast du am Ende gemacht? Wie ist es für dich gelaufen? –

+0

Der Vergleich ist vorgespannt. Eventlet hat seit dieser Zeit viele Verbesserungen und hat jetzt größere Unterstützung. –

4

Ihrer Frage zu beantworten Teil - wenn man sich http://speed.pypy.org aussehen werden Sie sehen, dass kann Ihnen einige speedups oben auf PyPy verdreht werden. Dies hängt natürlich von Ihrer Arbeitslast ab, aber es lohnt sich, es auszuprobieren.

Cheers,
Fijal

+1

Die Verwendung von PyPy bietet Ihnen eine enorme Beschleunigung, es lohnt sich also, darüber nachzudenken. Es gibt auch [Tornado] (http://tornadoweb.org/), das ist einfacher, viel schneller als verdreht, arbeitet stabiler bei hoher Belastung. –

0

ich eine kleine Echtzeit-Web-App auf der eventlet und repoze gebaut haben.bfg (Ich habe vor einiger Zeit den Django aufgegeben). Ich habe Eventlet- und Affepatching genauso einfach gefunden, wie Ted sagt.

0

Gevent ist kein reines Python und hängt ausschließlich von CPython ab. Von Web-Frameworks, die Sie erwähnten Eventlet (OpenStack) und Tornado (FriendsFeed, Quora) hat die größte Bereitstellung.