Files
2012-02-21 01:15:00 -05:00

1 line
54 KiB
JSON

[{"user_id": 5639, "stars": [{"date_created": 1298267459.2322221, "user_id": 4935}, {"date_created": 1298306034.209851, "user_id": 6310}, {"date_created": 1298323645.177036, "user_id": 38}, {"date_created": 1298339058.2216251, "user_id": 927}], "topic_id": 7774, "date_created": 1298263613.038775, "message": "I use Tornado because it fits my use cases well in those areas where I want async and a micro web framework. Tornado is also such a simple system that it's really just an async io loop you can rip out an do whatever you want with. It just happens to come with an HTTP implementation on top of the io loop.", "group_id": 292, "id": 156048}, {"user_id": 719, "stars": [], "topic_id": 7774, "date_created": 1298262532.9813759, "message": "I'm interested in comparisons and use cases for eventlet, greenlet, Twisted, Tornado or any other more obscure tools. Who's using what and why?", "group_id": 292, "id": 156000}, {"user_id": 4935, "stars": [], "topic_id": 7774, "date_created": 1298267580.713094, "message": "yeah, people seem to like Tornado's api. it's being used here just as a web server for a static site: https://github.com/mbostock/d3/ https://github.com/mbostock/d3/blob/master/examples/__main__.py", "group_id": 292, "id": 156802}, {"user_id": 13642, "stars": [], "topic_id": 7774, "date_created": 1298269132.364011, "message": "If you're interested in learning more about generators (which are used in several async python frameworks), this is a great resource: http://www.dabeaz.com/generators/Generators.pdf", "group_id": 292, "id": 156854}, {"user_id": 13642, "stars": [], "topic_id": 7774, "date_created": 1298269708.0136631, "message": "also if you're using python3 the concurrent.futures package looks pretty cool as well: http://docs.python.org/dev/whatsnew/3.2.html#pep-3148-the-concurrent-futures-module", "group_id": 292, "id": 156875}, {"user_id": 3748, "stars": [{"date_created": 1298265745.7885251, "user_id": 8391}, {"date_created": 1298271481.5863659, "user_id": 1822}], "topic_id": 7774, "date_created": 1298265213.1843431, "message": "add gevent to the list", "group_id": 292, "id": 156592}, {"user_id": 4935, "stars": [], "topic_id": 7774, "date_created": 1298267735.6865821, "message": "Ooh, parse_command_line. Didn't see that until now. :)", "group_id": 292, "id": 156810}, {"user_id": 4851, "stars": [{"date_created": 1298271490.8782051, "user_id": 8391}], "topic_id": 7774, "date_created": 1298271365.119988, "message": "I use eventlet heavily, and can't praise it highly enough! Your code stays nice and simple but doesn't block and that's all there is to it.", "group_id": 292, "id": 156981}, {"user_id": 1, "stars": [], "topic_id": 7774, "date_created": 1298278408.472383, "message": "@lamby That's a nice touch!", "group_id": 292, "id": 157241}, {"user_id": 8740, "stars": [{"date_created": 1298280450.2899649, "user_id": 1}, {"date_created": 1298288777.326232, "user_id": 13597}], "topic_id": 7774, "date_created": 1298280344.692996, "message": "We're using eventlet at ep.io, and I've used it for freelance clients of mine before - it's nice and clean, it has a decent community, a large array of different greened modules, and is threadsafe unlike gevent.", "group_id": 292, "id": 157335}, {"user_id": 13912, "stars": [], "topic_id": 7774, "date_created": 1298277952.6026421, "message": "I've used Twisted for larger projects in the past. It has lots of protocol implementations and well tested code that works as expected everywhere python does. I've also used eventlet for smaller web scrappers. I can say that eventlet needs the same amount of wrapping your head around it's concepts as twisted does for anything non-trivial.", "group_id": 292, "id": 157219}, {"user_id": 7129, "stars": [{"date_created": 1298280607.3482389, "user_id": 12817}, {"date_created": 1298292414.2084069, "user_id": 719}], "topic_id": 7774, "date_created": 1298278229.2104449, "message": "Amongst other things, we're using Twisted for a user-friendly maintenance page whilst we're doing non-trivial database migrations http://chris-lamb.co.uk/b/playfire_maintenance.png", "group_id": 292, "id": 157235}, {"user_id": 1078, "stars": [], "topic_id": 7774, "date_created": 1298278492.8836851, "message": "I would suggest waiting for stackless (soft-switch) support for gevent - soft switches are almost free (hard switch/greenlet does fancy stack copying magic, which I'm scared of). But Tornado is also great option, almost magic free.", "group_id": 292, "id": 157249}, {"user_id": 1, "stars": [], "topic_id": 7774, "date_created": 1298278559.4168601, "message": "@Joes Will that require stackless Python?", "group_id": 292, "id": 157257}, {"user_id": 1078, "stars": [], "topic_id": 7774, "date_created": 1298278569.838634, "message": "Yes.", "group_id": 292, "id": 157259}, {"user_id": 1, "stars": [], "topic_id": 7774, "date_created": 1298280481.297658, "message": "I also like that Eventlet has the ability to swap out hubs, so you could swap in a libevent or libev based one if you wanted to.", "group_id": 292, "id": 157362}, {"user_id": 8740, "stars": [], "topic_id": 7774, "date_created": 1298291973.725982, "message": "Yes, that too. People often don't realise you can use libevent with eventlet.", "group_id": 292, "id": 158347}, {"user_id": 3748, "stars": [], "topic_id": 7774, "date_created": 1298297692.5584719, "message": "@andrewgodwin I didn't know eventlet was threadsafe unlike gevent. I thought gevent was a \"better\" eventlet fork. BTW ep.io is awesome. Congratulations.", "group_id": 292, "id": 158796}, {"user_id": 6628, "stars": [], "topic_id": 7774, "date_created": 1298298476.068624, "message": "Celery (http://celeryq.org/) can be used for async processing.", "group_id": 292, "id": 158901}, {"user_id": 8740, "stars": [], "topic_id": 7774, "date_created": 1298298692.4305501, "message": "@jdaguilera Even though gevent was forked by the original eventlet developer, he always seems to be a little bit hostile about the whole thing. Still, I have code inside eventlet somewhere, so I'm slightly biased...", "group_id": 292, "id": 158936}, {"user_id": 257, "stars": [], "topic_id": 7774, "date_created": 1298301747.4669509, "message": "I have no strong opinions of one over the other, but so far I'm liking Eventlet", "group_id": 292, "id": 159318}, {"user_id": 257, "stars": [], "topic_id": 7774, "date_created": 1298301682.960346, "message": "http://blog.gevent.org/2010/02/27/why-gevent/", "group_id": 292, "id": 159312}, {"user_id": 3748, "stars": [], "topic_id": 7774, "date_created": 1298308006.4014599, "message": "@asksol is gevent part of celery or it's an add-on ?", "group_id": 292, "id": 160003}, {"user_id": 3748, "stars": [], "topic_id": 7774, "date_created": 1298307814.0746739, "message": "I use more gevent than eventlet also", "group_id": 292, "id": 159949}, {"user_id": 257, "stars": [], "topic_id": 7774, "date_created": 1298317648.445122, "message": "@idaguilera: it's part of Celery, not an add-on.", "group_id": 292, "id": 165092}, {"user_id": 6671, "stars": [{"date_created": 1298345152.5838981, "user_id": 1}], "topic_id": 7774, "date_created": 1298345149.2186329, "message": "@ericflo Not at all. I am always up for a spirited discussion :).", "group_id": 292, "id": 176816}, {"user_id": 14356, "stars": [], "topic_id": 7774, "date_created": 1298327691.7889061, "message": "I have a web site http://fon.st which helps users port and share their bookmarks (not just single links) and also provides short url service for entire bookmarks and individual links. I am using Tornado for serving bookmarks and redirecting short urls to the site. Tornado on one core of a 2.4GHz server performs at 850 link conversions/second (only from cache - slower otherwise, the cache handles over 6M links and I am working on an interface to SSD to increase the count with just a small penalty). Tornado runs behind Nginx.", "group_id": 292, "id": 172740}, {"user_id": 13854, "stars": [], "topic_id": 7774, "date_created": 1298348768.1396611, "message": "spawning - worth checking out if you are playing around with eventlet for web serving", "group_id": 292, "id": 177059}, {"user_id": 6671, "stars": [{"date_created": 1298340030.0398149, "user_id": 1}, {"date_created": 1298340197.7728209, "user_id": 242}, {"date_created": 1298340317.3508959, "user_id": 2108}, {"date_created": 1298348452.9448111, "user_id": 7}, {"date_created": 1298352981.2805531, "user_id": 4156}, {"date_created": 1298360839.7142999, "user_id": 214}, {"date_created": 1298369572.8804519, "user_id": 257}, {"date_created": 1298392974.2628591, "user_id": 222}, {"date_created": 1298586267.2026739, "user_id": 12142}], "topic_id": 7774, "date_created": 1298339992.91167, "message": "I use Twisted.", "group_id": 292, "id": 176500}, {"user_id": 2108, "stars": [], "topic_id": 7774, "date_created": 1298340329.652513, "message": "Me too.", "group_id": 292, "id": 176511}, {"user_id": 242, "stars": [], "topic_id": 7774, "date_created": 1298339803.0222681, "message": "@jonesy Twisted is also such a simple system that it's really just an async io loop you can rip out an do whatever you want with. It just happens to come with an HTTP/SMTP/DNS/IMAP4/POP3/XMPP/NNTP/SSH/IRC/FTP implementation on top of that io loop.", "group_id": 292, "id": 176495}, {"user_id": 927, "stars": [], "topic_id": 7774, "date_created": 1298339184.421536, "message": "@micrypt Like @jonesy I'm using Tornado because most of what I do is HTTP-centric, it's very easy to repurpose (e.g. I have some spiders built on top of the async HTTP client https://github.com/acdha/webtoolbox) and the underlying PyCurl dependency does mean nice things for speed", "group_id": 292, "id": 176455}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298341932.1987469, "message": "@ericflo Let's assume for the moment that eventlet is a great idea and that everyone should want to write code that looks like a gigantic mess of cooperative threads instead of a state machine (they shouldn't, btw ;-))", "group_id": 292, "id": 176576}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298341967.2022221, "message": "given that that's the case, it still seems odd to me to start from that premise, and then go straight to ... \"and as our core abstraction, we'll emulate send() and recv(), which nobody really understands in the first place anyway\"", "group_id": 292, "id": 176578}, {"user_id": 6671, "stars": [{"date_created": 1298341595.3634679, "user_id": 1}], "topic_id": 7774, "date_created": 1298341096.197119, "message": "I guess I should say something about the benefits of Twisted relative to these other things. The thing I really like about Twisted is that it's focused on presenting a complete, coherent abstraction layer for each layer of the event-processing stack. Something like Tornado, on the other hand, is focused on providing a convenient way to do just one thing. So in an afternoon you can easily port Tornado to run on Twisted (http://dustin.github.com/2009/09/12/tornado.html) but not the other way around.", "group_id": 292, "id": 176549}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298341749.4223781, "message": "@acdha pycurl is, afaik, going away. I don't really use the http client, so I'm not sure what the impact of that actually is (whether they've ported the functionality or what).", "group_id": 292, "id": 176564}, {"user_id": 1, "stars": [], "topic_id": 7774, "date_created": 1298341835.4182889, "message": "I understand Twisted has inlineDeferreds, but it's tricky since you don't have the full expressiveness of greenlet, and you have to have generators all the way down, and many libraries and such aren't written that way.", "group_id": 292, "id": 176571}, {"user_id": 1, "stars": [], "topic_id": 7774, "date_created": 1298342123.274085, "message": "True, but that's not something that's foreign to people, it's pretty common to have to reason about thread safety. And if it uses threadlocals or whatever, Eventlet can deal with that.", "group_id": 292, "id": 176584}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298341890.4064291, "message": "@glyph I've tried to approach twisted on three different non-trivial projects over the past 4-5 years, and each time I conclude that it's more trouble than it's worth. When another project comes up, though, I'll be happy to consider it again. I'm actually not religious about any of this crap, I just want something that works. The fact that the only twisted people I ever run into are die-hard zealots, though, is a little off-putting.", "group_id": 292, "id": 176575}, {"user_id": 1, "stars": [], "topic_id": 7774, "date_created": 1298341877.941011, "message": "I'm not saying Eventlet is *better* than Twisted, and in fact it has support for far less stuff, it's less wholistic in general, but I'd argue it's much more than a useful hack.", "group_id": 292, "id": 176572}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298342555.7815521, "message": "the loop is pluggable", "group_id": 292, "id": 176601}, {"user_id": 5639, "stars": [{"date_created": 1298364521.6642909, "user_id": 11592}, {"date_created": 1298369598.351558, "user_id": 257}], "topic_id": 7774, "date_created": 1298341571.3833089, "message": "@dreid I agree that Twisted is powerful and all that. I just prefer coding in Python. ;-)", "group_id": 292, "id": 176557}, {"user_id": 1, "stars": [], "topic_id": 7774, "date_created": 1298341781.7815461, "message": "@glyph Eventlet is way more than a useful hack IMO. It means I never have to think about callbacks or deferreds. It means I can call my code, instead of having it call me.", "group_id": 292, "id": 176568}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298342050.2273779, "message": "@ericflo Right, and it's super useful for that. When it works :). But in order to support that, redis basically has to be threadsafe, at least around all of its networking calls.", "group_id": 292, "id": 176583}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298342518.6757679, "message": "so, hardly a single niche.", "group_id": 292, "id": 176600}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298342919.9777081, "message": "@glyph https://github.com/facebook/tornado/blob/master/tornado/ioloop.py and here's something that uses it https://github.com/tonyg/pika/blob/master/pika/adapters/tornado_connection.py", "group_id": 292, "id": 176620}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298341665.9820371, "message": "Eventlet seems like a useful hack if you need to make some existing code asynchronous, and it's reasonably well-architected in that it lets you use the Twisted reactor as one of its \"hubs\", but if you're writing new code it seems weird to me to want to use it. If you're working on something new, why would you want to *pretend* to have to deal with nonsense like errnos and receive buffer sizes and whatnot? Like, compare the ridiculous loops you need to jump through to read a line if you're pretending to use a blocking socket API: http://svn.python.org/view/python/branches/release27-maint/Lib/socket.py?revision=84603&view=markup#l406 versus with Twisted: http://twistedmatrix.com/trac/browser/tags/releases/twisted-10.2.0/twisted/protocols/basic.py#L543", "group_id": 292, "id": 176559}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298341705.213093, "message": "@jonesy Twisted is *all about* letting you write your code in Python :). Its only mission in life is to translate network traffic into Python method calls.", "group_id": 292, "id": 176560}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298341946.2279129, "message": "@glyph if all of these people who seem to seek out users of tornado and other utilities to comment about how much better twisted is would just spend some time making twisted better, we'd all be using it by now.", "group_id": 292, "id": 176577}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298341995.657789, "message": "@jonesy http://twistedmatrix.com/highscores/", "group_id": 292, "id": 176579}, {"user_id": 1, "stars": [], "topic_id": 7774, "date_created": 1298342045.425652, "message": "Only now they can handle thousands of concurrent requests, because there's a state machine in the backend of it all.", "group_id": 292, "id": 176582}, {"user_id": 6671, "stars": [{"date_created": 1298342356.3772011, "user_id": 1}, {"date_created": 1298393074.9293151, "user_id": 222}], "topic_id": 7774, "date_created": 1298342230.3884881, "message": "My main point is that eventlet seems to work most of the time, and usually that's good enough. But Twisted really works, had good test coverage, and in the cases where it doesn't, bugs in obscure corner cases get fixed all the time. And for the most part you can just inherit that workingness for free in eventlet, and everybody's happy :)", "group_id": 292, "id": 176590}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298342502.1030581, "message": "we've implemented AMQP on it as well.", "group_id": 292, "id": 176598}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298342624.732028, "message": "@glyph I was responding to what looked like an assertion that tornado's ioloop isn't pluggable.", "group_id": 292, "id": 176606}, {"user_id": 1, "stars": [], "topic_id": 7774, "date_created": 1298342021.4110379, "message": "@glyph You're thinking about it waaay too hard, from the perspective of a library implementer. People using Eventlet don't care at all about send() and recv(). They import redis, patch it, and use it the way they did before.", "group_id": 292, "id": 176580}, {"user_id": 1, "stars": [], "topic_id": 7774, "date_created": 1298342168.0464039, "message": "I do see your point though, @glyph", "group_id": 292, "id": 176587}, {"user_id": 1, "stars": [{"date_created": 1298353485.3385201, "user_id": 4156}, {"date_created": 1298586907.5813179, "user_id": 12142}], "topic_id": 7774, "date_created": 1298342190.5775061, "message": "Any time complexity is hidden from the user is a place where something can go wrong in bad ways.", "group_id": 292, "id": 176588}, {"user_id": 6671, "stars": [{"date_created": 1298342448.1358271, "user_id": 1}, {"date_created": 1298361000.2233889, "user_id": 214}, {"date_created": 1298393102.3621621, "user_id": 222}], "topic_id": 7774, "date_created": 1298342391.2887609, "message": "I do have an issue with libraries like gevent and tornado which throw out the baby with the bathwater, and don't provide a pluggable implementation of their loop or hub. It's not even really about interoperating with Twisted (although obviously I like that, and once you have pluggability you can usually get it almost for free); it's more about being useful in more than one niche. Twisted isn't just a webserver, it's also a network engine for MMORPG game clients, embedded car-computing devices, and gigantic radio-telescope arrays.", "group_id": 292, "id": 176593}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298342492.093662, "message": "tornado, as I thought I mentioned, is an ioloop that happens to be bundled with an HTTP implementation that works with it. So it's not \"just a web server\".", "group_id": 292, "id": 176597}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298342510.249341, "message": "and an in-house binary protocol.", "group_id": 292, "id": 176599}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298342597.267606, "message": "@jonesy Well, clearly, I posted a link to a place where someone plugged in the Twisted loop :).", "group_id": 292, "id": 176603}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298342654.693341, "message": "@jonesy What's the plug-in API?", "group_id": 292, "id": 176611}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298342993.2867751, "message": "Oh, by \"pluggable\" you just mean \"can support event sources being plugged into it\"", "group_id": 292, "id": 176624}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298343008.440352, "message": "sure, that is basically the minimum requirement for being an I/O loop :)", "group_id": 292, "id": 176625}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298343032.207382, "message": "By \"pluggable\" I mean \"the I/O loop implementation itself can be replaced\"", "group_id": 292, "id": 176626}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298343091.9872711, "message": "For example, you can't use windows I/O completion ports with tornado's IOLoop, because the API provided is too low-level; there are expectations about when and how to call recv() and send(). Which also means that optimizations around reducing the amount of copying involved in doing a recv() or send() are difficult.", "group_id": 292, "id": 176632}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298343131.3998621, "message": "@glyph but.... the http server part of tornado just uses the ioloop in basically the same way pika does, so there's not really anything stopping you from replacing it. So happens, though, that it works, so I haven't. If someone implemented tornado on twisted, would that not count as replacing the ioloop?", "group_id": 292, "id": 176634}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298343221.1020429, "message": "Sort of. The fact that they replaced the IOLoop with Twisted is an improvement, but that code in pika depends on .fileno(), which won't work with all event loops. Granted, it probably works for most of the interesting ones on UNIX, but the point of having a high-level API is to get away from stuff like that.", "group_id": 292, "id": 176640}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298344058.2671261, "message": "Ah well. No familiarity with txamqp here. I suspect that the documentation is geared towards hackers with lots of existing Twisted experience but no AMQP experience, and I'm guessing you have the opposite background.", "group_id": 292, "id": 176698}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298344164.5981181, "message": "that was also my experience with xmlrpc on twisted some years ago. And something I can't recall right now like 2 years ago. The trend seems to be that everyone says 'use twisted' and then when I go to use twisted everyone says 'oh you wanted to do that?' Totally f'ing frustrating.", "group_id": 292, "id": 176706}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298344186.23035, "message": "In other words, put _on_data_available on a different object than _handle_read.", "group_id": 292, "id": 176709}, {"user_id": 3354, "stars": [{"date_created": 1298345050.226023, "user_id": 5639}, {"date_created": 1298588359.243557, "user_id": 12142}], "topic_id": 7774, "date_created": 1298345036.6491001, "message": "Maybe the Twisted guys could give a Teach Me Marketing open space session at PyCon?", "group_id": 292, "id": 176794}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298343776.0453899, "message": "@jonesy The only real benefit is \"avoiding duplication of work\". If you're not interested in the work that Twisted does, then no, it's not a big benefit.", "group_id": 292, "id": 176679}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298343835.994457, "message": "But you are at least interested in code that knows how to call recv() and listen() and accept() and deal effectively with the various crazy errors that may come back from all of those in a consistent manner, so you could eliminate a *little* bit of code by using Twisted :)", "group_id": 292, "id": 176684}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298344510.7115469, "message": "Few people comment that a full-on IMAP server in the same event loop as an SSH server is like, really hard to do, but everybody loves to harp on the fact that the XMLRPC docs are outdated and unhelpful :).", "group_id": 292, "id": 176742}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298345506.3466129, "message": "everyone thinks that the problem is that we don't have enough docs (and then sometimes people will occasionally come along and write a big pile of new docs, only to discover they're redundant)", "group_id": 292, "id": 176854}, {"user_id": 5639, "stars": [{"date_created": 1298344012.5572569, "user_id": 1}, {"date_created": 1298346553.3454199, "user_id": 719}], "topic_id": 7774, "date_created": 1298344003.820694, "message": "@glyph I might have if I could've deciphered txamqp as quickly as I did tornado.", "group_id": 292, "id": 176693}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298343658.607573, "message": "@glyph I guess twisted just has marketing issues. I just don't see all of the enormous benefits of using twisted over anything else. The only time anyone says anything to me about twisted is when I've chosen something else and the fanbois get their panties in a bunch. I'll use twisted if I ever find a use case that it's the best tool for.", "group_id": 292, "id": 176670}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298343666.8815961, "message": "And this is exactly why Tornado bugs me. If you had written your code to the Twisted protocol API (here: http://twistedmatrix.com/documents/10.2.0/api/twisted.internet.interfaces.IProtocol.html), it would be totally trivial to hook it in to any of the event loops that you support. But asyncore and tornado encourage a style where you call recv() yourself, and have to handle all of the messy exceptions that it might raise, and you will probably get it wrong, so your code won't work on weird platforms, or on non-socket transports. So instead of 'def dataReceived(self, data)' you've got https://github.com/tonyg/pika/blob/master/pika/adapters/base_connection.py#L194", "group_id": 292, "id": 176672}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298345481.7773099, "message": "But, it's a bit of a mess. Written by different authors at different times, covering different interest groups", "group_id": 292, "id": 176853}, {"user_id": 3354, "stars": [], "topic_id": 7774, "date_created": 1298345087.6997659, "message": "Could be fun: not many stuffed shirts in the Twisted crowd, and they were really helpful at \"Teach Me Twisted\"", "group_id": 292, "id": 176806}, {"user_id": 5639, "stars": [{"date_created": 1298345241.733674, "user_id": 1}], "topic_id": 7774, "date_created": 1298345238.253947, "message": "ok, first of all, just found tab completion in convore, which rocks.", "group_id": 292, "id": 176826}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298344429.6827841, "message": "@ericflo I think that some of those things are related. For example - and you may be witnessing this right now - the fact that we have solved some Hard Problems goes generally unrecognized. The reason we chafe a bit at hearing e.g. Twisted and Tornado be compared is that Tornado's design is really worse, but you don't realize it's worse until you want to do something that is enormously difficult with Tornado but you got for free with Twisted.", "group_id": 292, "id": 176736}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298345138.2370729, "message": "@glyph - me neither.", "group_id": 292, "id": 176815}, {"user_id": 1, "stars": [{"date_created": 1298394688.111928, "user_id": 12347}], "topic_id": 7774, "date_created": 1298345215.3928919, "message": "Yeah, definitely, Twisted is OG :)", "group_id": 292, "id": 176825}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298345391.3848331, "message": "we published our coding standard first, but then it was mostly ignored during the PEP8 process", "group_id": 292, "id": 176838}, {"user_id": 1, "stars": [{"date_created": 1298353720.294091, "user_id": 4156}, {"date_created": 1298361241.3745699, "user_id": 214}, {"date_created": 1298394635.9308889, "user_id": 12347}], "topic_id": 7774, "date_created": 1298344964.6559761, "message": "It's not just the website though. There are a bunch of littler things too, mostly superficial but it all makes Twisted feel \"different\" from everything else. Firstly, the camelCase methods. Yeah, yeah I know, but still. Then there's all of the zope.interface stuff that gives people *immediate* bad reactions. Then there's that Twisted is documented using mostly API docs instead of prose docs, which everyone else seems to do. Also that the Twisted community has largely embraced Launchpad, the worst code hosting tool by far, is very telling I think.", "group_id": 292, "id": 176784}, {"user_id": 6671, "stars": [{"date_created": 1298588321.9080081, "user_id": 12142}], "topic_id": 7774, "date_created": 1298345011.4820571, "message": "@jonesy zope.interface != zope :)", "group_id": 292, "id": 176790}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298345244.694396, "message": "It's not like we chose to be weird or purposefully different; we chose working solutions, and implemented them, and then python core always ended up going off in some other funky direction", "group_id": 292, "id": 176827}, {"user_id": 6671, "stars": [{"date_created": 1298361302.874676, "user_id": 214}], "topic_id": 7774, "date_created": 1298345307.798435, "message": "we had camelCase as a standard because I thought it was weird that the stdlib didn't have a standard, and I thought it was obvious that since class names were LikeThis method names should be likeThis", "group_id": 292, "id": 176833}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298345400.1395941, "message": "LAUNCHPAD 4EVA", "group_id": 292, "id": 176840}, {"user_id": 1, "stars": [], "topic_id": 7774, "date_created": 1298345417.4873099, "message": "haha seriously? man, it's so so so bad dude", "group_id": 292, "id": 176843}, {"user_id": 12404, "stars": [{"date_created": 1298345798.690527, "user_id": 1}], "topic_id": 7774, "date_created": 1298345783.8372209, "message": "@ericflo pyramids are pretty thorough too. http://docs.pylonsproject.org/projects/pyramid/1.0/", "group_id": 292, "id": 176884}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298345720.5149801, "message": "@glyph certainly there has to be some subset of twisted that is used by IMAP, SSH and the rest that would be considered the nexus of what twisted really is.", "group_id": 292, "id": 176881}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298345126.9789469, "message": "man, I wish I could do a 'Teach me Twisted'. I heard about that.", "group_id": 292, "id": 176812}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298344199.9753709, "message": "somewhere in some irc log from like 2007 is me asking about xmlrpc on twisted and others chiming in saying \"we'd love some help in that area\". :/", "group_id": 292, "id": 176711}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298344666.4093411, "message": "@glyph the perception the rest of the world gets from all the harassment for using other tools is that twisted must be good at everything, so when users go there only to find out that just evaluating it for suitability on a given project is brain surgery, they're in no big rush to look at how cool IMAP and SSH on a single event loop is.", "group_id": 292, "id": 176755}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298344785.3422501, "message": "Even the docs aren't really all that bad, if you just print them out and read them end to end; the problem is that you can't figure out which docs you need to read for your particular project.", "group_id": 292, "id": 176765}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298344847.923898, "message": "Also, we don't really harass people for using other tools. Mostly we show up when people start saying incorrect stuff about Twisted. Tornado gets a particularly bad rap because the announcement included a bunch of half-truths and vague accusations about Twisted's performance which were never backed up.", "group_id": 292, "id": 176770}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298344916.3614769, "message": "for example, while I'm not happy about tornado's current state of testing, it has tests, but it's still pretty common to hear that it doesn't.", "group_id": 292, "id": 176779}, {"user_id": 1, "stars": [{"date_created": 1298344406.4669449, "user_id": 12404}, {"date_created": 1298346605.729918, "user_id": 719}, {"date_created": 1298353595.6722109, "user_id": 4156}], "topic_id": 7774, "date_created": 1298344170.756711, "message": "I think the biggest problem for Twisted is its high barrier of entry on all fronts. Documentation is not beginner friendly. Code is not approachable from someone who hasn't spent a lot of time reading through the source code. And frankly, sometimes the community can be abrasive. The thing is, I think it's pretty clear there's great stuff there, a lot of the Hard Problems have been solved. But developers are lazy bastards, and given something that's hard to understand, and something that's easy to understand, they'll choose the easy one ten times out of ten.", "group_id": 292, "id": 176707}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298344072.243257, "message": "(I hear good things about it from other Twisted folks but I have never had reason to use it.)", "group_id": 292, "id": 176700}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298344123.335974, "message": "@jonesy You could make pika support Twisted pretty easily if you would change the interesting event in your connection layer from \"the socket state changed, what do I do, is it time to call some functions\" to \"some data arrived, here it is\".", "group_id": 292, "id": 176703}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298344240.096179, "message": "maybe the thing to do is improve the tornado model, eh?", "group_id": 292, "id": 176714}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298344545.4540789, "message": "@jonesy No, but we haven't really had any users ask for that yet. Some of our developers have been porting over dependencies, slowly.", "group_id": 292, "id": 176747}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298345563.159786, "message": "I could do the thing that everybody else does and just write a little \"make your own blog with Twisted\" thing, but then people would complain that they're not using Twisted for web stuff, they already have django for that, they're using Twisted for the IMAP server and they really want to see docs on that", "group_id": 292, "id": 176860}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298345775.0428269, "message": "@jonesy Yes! And that's covered in the finger tutorial ;-)", "group_id": 292, "id": 176883}, {"user_id": 1, "stars": [{"date_created": 1298344380.262311, "user_id": 5639}, {"date_created": 1298344385.1892459, "user_id": 6671}], "topic_id": 7774, "date_created": 1298344369.8231871, "message": "(BTW, Twisted Web in 60 Seconds was a huge huge improvement IMO, it actually convinced me to use Twisted Web for a project)", "group_id": 292, "id": 176727}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298344396.7071681, "message": "hey I forgot about that. I'm gonna go look that up.", "group_id": 292, "id": 176732}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298344405.9673281, "message": "@glyph does twisted work w/ Python 3?", "group_id": 292, "id": 176734}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298344759.9743669, "message": "@jonesy That's fair, but mostly it boils down to \"the website needs help\". One of the problems with running a project that has people who know stuff about DNS and IMAP and SSH is that we don't have as much web-design expertise a project which is really all about HTTP :).", "group_id": 292, "id": 176762}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298344861.26475, "message": "I have to say, for myself, that I find the stance of twisted users downright arrogant, and it doesn't endear me to the project. Tell them to quit being offended and start spending real time thinking about why we make the choices we do, and working on the parts of twisted that make us go another way. If it's docs or site, fix them (we've been hearing this bit about the web site and the docs for some time - is anything happening there?).", "group_id": 292, "id": 176773}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298345000.9955699, "message": "zope could create world peace, I'm still not likely to touch it again.", "group_id": 292, "id": 176789}, {"user_id": 1, "stars": [], "topic_id": 7774, "date_created": 1298345019.296185, "message": "So boiling all of that stuff down to \"the website needs help\" isn't true. It's all of these things that make Twisted feel different, and different is barrier to entry.", "group_id": 292, "id": 176792}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298345035.6045201, "message": "@glyph I'm sure that's documented somewhere ;-)", "group_id": 292, "id": 176793}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298345069.184371, "message": "@ericflo Hmm, that's very interesting.", "group_id": 292, "id": 176801}, {"user_id": 1, "stars": [], "topic_id": 7774, "date_created": 1298345128.4586761, "message": "@glyph I don't mean to offend at all, BTW.", "group_id": 292, "id": 176813}, {"user_id": 1, "stars": [], "topic_id": 7774, "date_created": 1298345374.519973, "message": "Totally understandable.", "group_id": 292, "id": 176837}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298345396.8263631, "message": "and as to the other thing", "group_id": 292, "id": 176839}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298344880.756355, "message": "twisted came right back by perpetuating some half-truths about tornado. Call it even. :)", "group_id": 292, "id": 176776}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298344984.804831, "message": "zope--", "group_id": 292, "id": 176788}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298345055.3261881, "message": "@holdenweb that would rock a little.", "group_id": 292, "id": 176797}, {"user_id": 6671, "stars": [{"date_created": 1298588427.5808051, "user_id": 12142}], "topic_id": 7774, "date_created": 1298345182.5440359, "message": "But seriously - that was an interesting comment about the \"differentness\" of Twisted. It had never consciously occurred to me, but I guess I'm a little bit bitter about some of that stuff after all these years :).", "group_id": 292, "id": 176822}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298345194.2511621, "message": "as you probably know, Twisted predates PEP 8", "group_id": 292, "id": 176824}, {"user_id": 1, "stars": [], "topic_id": 7774, "date_created": 1298345429.767015, "message": "we should probably fork to another topic to talk about that though, hah", "group_id": 292, "id": 176844}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298345445.3455639, "message": "heh yes", "group_id": 292, "id": 176845}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298345448.45854, "message": "the prose docs thing isn't *quite* fair to Twisted though.", "group_id": 292, "id": 176846}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298345454.11759, "message": "We have like 500 pages of prose documentation.", "group_id": 292, "id": 176847}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298345602.727103, "message": "I actually went through a beginner tut on twisted in an airport once, and it was good (the Finger protocol tutorial), but that's only useful for people who've accepted twisted as their saviour already.", "group_id": 292, "id": 176868}, {"user_id": 3354, "stars": [], "topic_id": 7774, "date_created": 1298345603.403125, "message": "Twisted's documentation may be opaque, but at least it's obvious that effort has been expended.", "group_id": 292, "id": 176869}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298345931.785661, "message": "@glyph if I could just use the reactor, that'd be one thing. But using the reactor implies that I'm going to subscribe to the entire twisted philosophy with regards to how I write my app, no? Is the reactor just a spinning loop that delivers deferreds?", "group_id": 292, "id": 176892}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298346113.4519751, "message": "Yeah, if people are interested in contributing, there's no shortage of existing work that's been identified.", "group_id": 292, "id": 176913}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298345269.271029, "message": "so, we had our own cruddy interfaces module, and then we got together with the zope people and painstakingly standardized everything after hammering out some common use-cases", "group_id": 292, "id": 176831}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298345280.923779, "message": "and then core goes off and comes up with some whole new thing that doesn't quite work as well (ABCs)", "group_id": 292, "id": 176832}, {"user_id": 13854, "stars": [], "topic_id": 7774, "date_created": 1298347614.4503081, "message": "twisted - barrier to entry is way to high for simple stuff and I still think is way higher than it _should_ be", "group_id": 292, "id": 176994}, {"user_id": 6671, "stars": [{"date_created": 1298345526.037318, "user_id": 1}, {"date_created": 1298361325.1018021, "user_id": 214}], "topic_id": 7774, "date_created": 1298345521.178458, "message": "but the problem is that when you have something the size and generality of Twisted, documenting it is a nightmare", "group_id": 292, "id": 176857}, {"user_id": 3354, "stars": [], "topic_id": 7774, "date_created": 1298345555.406708, "message": "I know there are people who swear by Launchpad, but I just haven't really ever got the poin", "group_id": 292, "id": 176859}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298345598.4794321, "message": "django has to do one intro document; Twisted has to do 50", "group_id": 292, "id": 176866}, {"user_id": 1, "stars": [{"date_created": 1298394771.6399839, "user_id": 12347}, {"date_created": 1298411095.8466129, "user_id": 38}], "topic_id": 7774, "date_created": 1298345684.530592, "message": "FWIW I think Flask is the new bar for documentation http://flask.pocoo.org/docs/", "group_id": 292, "id": 176879}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298345467.6458399, "message": "I couldn't care less about coding style as long as it's consistent. I hate launchpad, but also don't care about it. I just want enough docs to evaluate whether twisted can actually be useful to me given some set of requirements for a project.", "group_id": 292, "id": 176850}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298345509.3913391, "message": "I have to read php, perl, python, C, and occasionally java and erlang. God help me.", "group_id": 292, "id": 176855}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298345611.677707, "message": "the current docs are the result of the organizational schizophrenia that results from trying to do that", "group_id": 292, "id": 176871}, {"user_id": 1822, "stars": [{"date_created": 1298345736.0041299, "user_id": 1}], "topic_id": 7774, "date_created": 1298345731.2677579, "message": "the flask docs are practically an opensource project unto themselves", "group_id": 292, "id": 176882}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298345791.968574, "message": "@glyph - and from that, I'd guess there are outgrowths from that core in different directions that serve different needs. Those outgrowths probably need their own docs, and should be linked to from every other doc.", "group_id": 292, "id": 176886}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298345796.105392, "message": "@jonesy the power of the reactor compels you, the power of the reactor compels you, etc.", "group_id": 292, "id": 176887}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298345948.3119631, "message": "Maybe we should fork off a new topic for this", "group_id": 292, "id": 176894}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298345983.9829891, "message": "@glyph happy to. Don't be offended if I don't return until tomorrow though. I still have a book deadline to meet :(", "group_id": 292, "id": 176898}, {"user_id": 5639, "stars": [], "topic_id": 7774, "date_created": 1298346004.6991911, "message": "@glyph but I'm a lover of docs, and would love to help work some of this stuff out if I can.", "group_id": 292, "id": 176902}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298345965.0070291, "message": "\"twisted doc problems\". I'm all for promoting Twisted but I don't want it to totally drown out the other frameworks being discussed here.", "group_id": 292, "id": 176897}, {"user_id": 5701, "stars": [], "topic_id": 7774, "date_created": 1298346071.0665591, "message": "There is lots and lots of very well-defined, specific work to be done on Twisted's docs. For starters, http://twistedmatrix.com/trac/report/15", "group_id": 292, "id": 176909}, {"user_id": 13854, "stars": [], "topic_id": 7774, "date_created": 1298348712.138114, "message": "gevent - since it is a fork of eventlet I didn't really find the performance (apps are mostly IO bound) to be that significant YMMV", "group_id": 292, "id": 177052}, {"user_id": 13854, "stars": [], "topic_id": 7774, "date_created": 1298347976.508069, "message": "tornado - lightweight and simple but major drawback is any networking library must be rewritten using async ioloop (I think it can be integrated into Twisted) however not many libraries have been ported to work on either twisted or tornado", "group_id": 292, "id": 177021}, {"user_id": 13854, "stars": [], "topic_id": 7774, "date_created": 1298348077.728718, "message": "eventlet - low barrier to entry and works out of the box with any networking libraries that using the Python stdlib however C libraries need special handling", "group_id": 292, "id": 177031}, {"user_id": 4356, "stars": [], "topic_id": 7774, "date_created": 1298374710.665812, "message": "I'm currently using eventlet. I was researching a good async lib to use with zeromq. My initial thought was to use twisted, but all I could find in response to questions on how to integrate zeromq properly with twisted were explanations as to why it wasn't going to happen. Boothead said \"hey check out eventlet, it supports zeromq, and ask me any questions you want.\" A day later I was up and running.", "group_id": 292, "id": 178583}, {"user_id": 1152, "stars": [{"date_created": 1298399858.886538, "user_id": 2588}], "topic_id": 7774, "date_created": 1298375988.6144421, "message": "@glyph I think you hit on something with what you said about \"make your own blog\" - I actually think twisted needs more of the narrative, tutorial style things. You don't need to stop at \"build your own blog\" - you could have build your own **$ style tutorials where you sat down and explained, in a personable and approachable way, how to accomplish given tasks which acts as a gentle introduction as the person reads to the more opaque concepts within twisted.", "group_id": 292, "id": 178693}, {"user_id": 1152, "stars": [{"date_created": 1298399864.5789621, "user_id": 2588}, {"date_created": 1298403742.1456549, "user_id": 1}, {"date_created": 1298453885.6179211, "user_id": 3656}], "topic_id": 7774, "date_created": 1298376077.617249, "message": "@glyph I will also point to Django's documentation (http://docs.djangoproject.com/en/1.2/) as having a particular style that has served it very, very well (it's widely considered one of the best documented python projects). Taking a step back and not just describing the interface, but providing a narrative around that interface can be helpful. Just some thoughts.", "group_id": 292, "id": 178695}, {"user_id": 242, "stars": [], "topic_id": 7774, "date_created": 1298394087.4209881, "message": "@jessenoller People I've talked to about Twisted docs before don't seem to actually like the most narrative documentation it has \"The Finger Tutorial\" (http://twistedmatrix.com/documents/current/core/howto/tutorial/index.html) Maybe it just needs to be updated to a more relevant topic though.", "group_id": 292, "id": 180360}, {"user_id": 927, "stars": [], "topic_id": 7774, "date_created": 1298400989.462281, "message": "@jonesy Looking at it the code, it seemed like they're planning to transition over when it's feature-competitive. I'm not sure where that'll be performance-wise, especially relative to what will be current in the gevent/eventlet/twisted world by the time that happens.", "group_id": 292, "id": 181296}, {"user_id": 3354, "stars": [], "topic_id": 7774, "date_created": 1298416802.688138, "message": "@dreid: I answer this in \"Twisted's Documentation\"", "group_id": 292, "id": 184995}, {"user_id": 4935, "stars": [{"date_created": 1298423475.6330681, "user_id": 1}], "topic_id": 7774, "date_created": 1298423293.7065921, "message": "an article from someone who thinks evented programming in python goes against the grain & is using Node.js despite its immaturity: http://developers.simplegeo.com/blog/2011/02/22/adding-node-js-to-the-stack/", "group_id": 292, "id": 185334}, {"user_id": 4935, "stars": [], "topic_id": 7774, "date_created": 1298425334.21491, "message": "@jdaguilera yep...I know the guy who wrote it, too", "group_id": 292, "id": 185435}, {"user_id": 3748, "stars": [], "topic_id": 7774, "date_created": 1298425204.128772, "message": "@bat excellent blog post", "group_id": 292, "id": 185428}, {"user_id": 3748, "stars": [], "topic_id": 7774, "date_created": 1298425488.802387, "message": "I am beginning to use node.js and feel good about it. Cons: not much libraries", "group_id": 292, "id": 185440}, {"user_id": 3748, "stars": [], "topic_id": 7774, "date_created": 1298425579.0795479, "message": "@bat are you using node.js?", "group_id": 292, "id": 185446}, {"user_id": 4935, "stars": [], "topic_id": 7774, "date_created": 1298425713.9059789, "message": "obsessing over it? \u2713 using it? \u2717", "group_id": 292, "id": 185448}, {"user_id": 4935, "stars": [], "topic_id": 7774, "date_created": 1298425731.0267949, "message": "(haven't completed my first project yet)", "group_id": 292, "id": 185450}, {"user_id": 3748, "stars": [], "topic_id": 7774, "date_created": 1298425999.7397721, "message": "the external library ( pygments ) is the one used by sphinx?", "group_id": 292, "id": 185466}, {"user_id": 4935, "stars": [], "topic_id": 7774, "date_created": 1298425802.2916501, "message": "check this out if you haven't yet. example of using an external library (Pygments) from the command line, running the process once but communicating with it in a loop http://jashkenas.github.com/docco/", "group_id": 292, "id": 185459}, {"user_id": 12780, "stars": [], "topic_id": 7774, "date_created": 1298434530.6839271, "message": "i'm still confused why the python community has both eventlet and gevent. aren't they basically the same thing (minus the fork)? Once either is installed, is there really a difference to the programmer? it's hard to decide which to use with gunicorn. i don't see an obvious trend one way or the other.", "group_id": 292, "id": 185709}, {"user_id": 3748, "stars": [], "topic_id": 7774, "date_created": 1298437115.7766881, "message": "This a list of async server in python ( a bit old ) http://nichol.as/asynchronous-servers-in-python", "group_id": 292, "id": 185803}, {"user_id": 6671, "stars": [], "topic_id": 7774, "date_created": 1298453640.8627291, "message": "@jessenoller Answering in the \"twisted's documentation\" topic.", "group_id": 292, "id": 186402}, {"user_id": 3656, "stars": [], "topic_id": 7774, "date_created": 1298453955.195946, "message": "@jessenoller API doc is to documentation as the list of ingredients is to recipe", "group_id": 292, "id": 186417}, {"user_id": 8740, "stars": [], "topic_id": 7774, "date_created": 1298455023.176137, "message": "@bryanweingarten They're reasonably similar, but they do have a different API and different advantages (threadsafety, raw speed, etc.)", "group_id": 292, "id": 186476}, {"user_id": 719, "stars": [], "topic_id": 7774, "date_created": 1298456105.969234, "message": "@jdaguilera Is there a particular Node.js library you were interested in? I tend to find that even if it's not perfect yet, there's usually something out there.", "group_id": 292, "id": 186535}, {"user_id": 13854, "stars": [], "topic_id": 7774, "date_created": 1298460704.0568681, "message": "@bryanweingarten I use eventlet because the speed is fast enough, I like using spawning and I am mainly using it for WSGI so the API differences don't matter that much to me. If raw speed was the most important I would probably use http://www.fapws.org because it is faster than either one in my benchmarks (YMMV).", "group_id": 292, "id": 186902}, {"user_id": 3748, "stars": [], "topic_id": 7774, "date_created": 1298471299.744606, "message": "@micrypt anything to deal with postgresql and sqlserver", "group_id": 292, "id": 187728}, {"user_id": 12780, "stars": [], "topic_id": 7774, "date_created": 1298571642.2116261, "message": "@lateefj gevent also has several spawn function, so spawning is not a difference. It seems in this topic thread mentioned eventlet much more than gevent though.", "group_id": 292, "id": 199925}, {"user_id": 242, "stars": [], "topic_id": 7774, "date_created": 1298583259.141505, "message": "@bryanweingarten I think he meant the rather poorly named spawning web server built on eventlet by donovan preston.", "group_id": 292, "id": 202384}, {"user_id": 12780, "stars": [], "topic_id": 7774, "date_created": 1298583813.372376, "message": "@dreid thanks, i stand corrected.", "group_id": 292, "id": 202491}, {"user_id": 13854, "stars": [], "topic_id": 7774, "date_created": 1298690932.872618, "message": "@bryanweingarten sorry I forgot to include the link to spawning http://pypi.python.org/pypi/Spawning which is what I was talking about", "group_id": 292, "id": 212685}]