views:

273

answers:

4

I keep hearing all this hype about Twisted for python, but i just find it plain confusing. What do you think is more simple to use? Simple sockets or implementing twisted ?

+3  A: 

I'd say it's good. Just look at this page of projects using twisted.

Dirk Eddelbuettel
+3  A: 

Twisted is a concurrency framework. It allows you to juggle multiple tasks in one application without using threads/processes. It does this using an event driven asynchronous system and is especially good with networking applications. Asynchronous code generally tends to be a little 'different' from normal stuff since the flow is not explicit and things happen based on external events. This can be confusing but it works. Twisted is arguably the most mature Python async concurrency library so if that's what you're planning to do, twisted is a good thing to bet on.

"Simple sockets" as you put them are communication primitives and not really comparable to twisted. What are you trying to do?

Noufal Ibrahim
+11  A: 

I stand by what I wrote in Python in a Nutshell (2nd edition p. 540):

Twisted includes powerful, high-level components such as web servers, user authentication systems, mail servers and clients, instant messaging, SSH clients and servers, a DNS server and client, and so on, as well as the lower-level infrastructure on which all these high-level components are built. Each component is highly scalable and easily customizable, and all are integrated to interoperate smoothly. It's a tribute to the power of Python and to the ingenuity of Twisted's developers that so much can be accomplished within two megabytes' worth of download.

Asking whether this incredibly rich and powerful framework is "simpler to use" than "simple sockets" is a bit like asking if a car is "simpler to use" than a screw: what a weird question!

Cars are built with screws (among other things), and can't be quite as "simple to use" -- just because a screw does so little, a car does so much.

But if you want to get from A to B (and possibly carry passengers, luggage, pets, ...) a screw won't help much (unless you're basically going to build a car from scratch;-).

Of course cars aren't the only way to get from A to B, just as twisted is not the only way to build network-centric systems in Python. A horse and buggy (like asyncore) is quaint and fun, though less practical; a high-speed train (like tornado) may be easier to use and at least as fast, though much less flexible; and for various specialized purposes you may prefer all kinds of other conveyances, from unicycles to cruise ships (like, in Python and for networking, all kinds of other packages, from paramiko to dnspython) -- all of them will include screws as part of their components (like, all will include sockets as part of the way they're built), none will be as easy to use as "simple sockets", each (in its own range of applicability) will do a lot more for you than "simple sockets" on their own possibly could.

Twisted is an excellent choice in a vast number of cases, often the best when you need to integrate multiple aspects of functionality and/or implement some protocol for which there is no fully packaged solution. "Simple sockets" are not -- they're just a low-level component out of which higher-functionality, higher-level ones are built, and there rarely is a good reason (except learning, of course) to "roll your own" higher level components built "from scratch" on top of sockets (rather than picking powerful, well-built existing ones) -- just like you'd rarely be justified in building your own computer out of transistors, resistors, capacitors, etc, rather than picking appropriate integrated circuits;-).

Alex Martelli
Well, i just want to learn. That was why i asked :b I want to learn to build the car! :P
Jake
hope there is a "Twisted in a nutshell". I love the book "Python in a nutshell" and "Python Cookbook". I still can't write code proficiently with twistedmatrix even finish reading the current Twisted book and Twisted document...
sunqiang
@Jake, learning to build cars is a wonderful endeavor. Unfortunately there is no really good textbook for it (not one based on Python, at least), but you can progress gradually through studying sockets, TCP/IP, higher-level protocols on top of them, some protocols' implementation in the Python standard library (plain vanilla, no multitasking), then threading vs async systems, asyncore, twisted (in each case, mixing "how do I use it for task X" with "how is this implemented internally and why did they pick this design decision"). Long journey indeed, but, great learning ahead!-)
Alex Martelli
Alex Martelli
@Alex, yes, it is the referred book. Several years ago, most python related book are "General" Python book which provides comprehensive coverage. Now days Python is more popular, there is some specialized Python books only cover part subjects. I think it's a good thing to Python Community (, and to me too of course).
sunqiang
Jake, if you want to "learn to build the car", perhaps it would be good for you to work on Twisted itself, rather than make something *with* Twisted? There's always more to do (see <http://twistedmatrix.com/trac/report/1>) and we are always available on #twisted on the Freenode IRC network to help you get started.
Glyph
A: 

Twisted was first released in 2002 and has bloated substantially since then; (this is a touchy subject and many people would argue that this is good and necessary in a framework) - However for someone approaching the project now it can be a bit daunting. There are options however if you're pushing towards asynchronous frameworks. I found this blog to be interesting: http://nichol.as/asynchronous-servers-in-python. Benchmarks aside, the code samples alone are quite interesting to compare.

dagoof
twisted is heavy, I agree but not bloated. Its a very liberating feeling when you're looking for something and you find it inside twisted - already implemented, tested and ready to go.
jeffjose