Is twisted any good?

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 ?


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;-).

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?

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

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: Benchmarks aside, the code samples alone are quite interesting to compare.

Need Your Help

Rails error: Can't mass-assign protected attributes


I am trying to build an extremely simple AddressBook rails application. However, I am getting this error "Can't mass-assign protected attributes: city_id". How can I fix this? Please feel free to a...