2010/5/9 Peter Cai <newptcai@gmail.com>:
Today, a guy gave me an URL http://code.google.com/p/stacklessexamples/wiki/StacklessNonblockModules
It's a replacement of standard python socket module. What make it different is that this module only blocks a tasklet, not an entire Python thread.
Gevents does monkey patching too and work with standard cpython.
With this module and stackless python, theoretically, we can build a high concurrency network application framework which has a programming style close to traditional multi-thread module.
This works with pure-python approach, not with a database driver written in C. If you monkey-patch python threads with your tasklets, greenlets or anything else your are lost. Mix threaded model for blocking things and tasklet/greenlet model for non-blocking thing are not magic :-(
The guy who gave me that URL asked a question, "Which style is better? The Twited's event-driven style or the imaginary one?"
What do you think about it? Of course, twisted is an mature framework we can trust, but doesn't the imaginary one also have pros?
IMHO (all from here) Twisted is coherent with itself. Monkey-patched solutions pretends be coherent with threaded style, but something fails. Twisted pros: * Is not based in a thread style. Forget wich is a non-reentrant lock and a dead-lock. * If you use a twisted library you don't need think about blocking issues. If you don't use a twisted library, defer to thread. * It's mature. Monkey patched pros: * Convert a thread style application to async one don't need a full rewrite. Maybe it's not easy, but need less LOCs. * If your libraries are prue-python you don't need think, only apply a monkey-patch. * Sounds cool. Excuse my poor english, Javi