Difference between revisions of "Eventlet"

From Second Life Wiki
Jump to navigation Jump to search
 
(9 intermediate revisions by 4 users not shown)
Line 1: Line 1:
= Eventlet =
= [http://eventlet.net Eventlet] =


Eventlet is a networking library written in Python. It achieves high scalability by using [http://en.wikipedia.org/wiki/Non-blocking_IO#Select.28.2Fpoll.29_loop non-blocking io] while at the same time retaining high programmer usability by using [http://en.wikipedia.org/wiki/Coroutine coroutines] to make the non-blocking io operations appear blocking at the source code level.
Eventlet is a networking library written in Python. It achieves high scalability and concurrency by using [http://en.wikipedia.org/wiki/Non-blocking_IO#Select.28.2Fpoll.29_loop non-blocking io] while at the same time retaining high programmer usability by using [http://en.wikipedia.org/wiki/Coroutine coroutines] to make the non-blocking io operations appear blocking at the source code level.


* Example code: [[Eventlet/Examples]]
* [http://blog.eventlet.net/ Blog]
* PyPI entry: http://pypi.python.org/pypi/eventlet/
* [http://eventlet.net/doc/ Documentation]
* Subversion repository: http://svn.secondlife.com/svn/eventlet
* [https://lists.secondlife.com/pipermail/eventletdev/ Mailing List Archives]
* Unstable mercurial (hg) repository: http://www.donovanpreston.com:8888/eventlet
* [http://eventlet.net/hudson/ Automated Builds]
* Trac page: http://svn.secondlife.com/trac/eventlet
* [http://bitbucket.org/which_linden/eventlet/issues/new/ Bug Report Form]
* Mailing list: https://lists.secondlife.com/cgi-bin/mailman/listinfo/eventletdev
* [irc://chat.freenode.net/#eventlet irc channel]


== Documentation ==


[[Eventlet/Documentation]]
Linden Lab open-sourced Eventlet [http://blogs.secondlife.com/community/features/blog/2007/08/25/more-open-source-our-web-services-libraries in 2007], and it's been under continuous development since.  Several applications have been built on top of Eventlet, such as [http://pypi.python.org/pypi/Spawning/ Spawning] and [http://pypi.python.org/pypi/proxylet/ Proxylet].


== Releases ==
== Other resources ==
 
[http://soundfarmer.com/content/slides/coroutines-nonblocking-io-eventlet-spawning/coros,%20nonblocking%20i:o,%20eventlet,%20spawning.pdf Article talks about coros, eventlet and spawning]
{| cellpadding="6"
|-
| '''Name''' || '''Date''' || '''URL'''
|-
| 0.6.1 || July 7, 2008 || http://pypi.python.org/pypi/eventlet/0.6.1
|-
| beta-1 || Aug 24, 2007 || [http://svn.secondlife.com/trac/eventlet/changeset/8/branches/beta-1?old_path=%2F&format=zip]  [http://svn.secondlife.com/svn/eventlet/branches/beta-1]
|}
 
== Requirements ==
 
Eventlet runs on Python version 2.3 or greater, with the following dependencies:
* [http://cheeseshop.python.org/pypi/greenlet greenlet]
* [http://pyopenssl.sourceforge.net/ pyOpenSSL] if you want to use ssl sockets
* (if running python versions < 2.4) a deque object in a <code>collections</code> module.  One option is to copy [http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/259179 this deque] into a file called <code>collections.py</code>.
 
== Eventlet at Linden ==
 
eventlet is the networking library used to implement the [[backbone]] architecture.  Backbone is primarily an http server, and as such uses the eventlet.httpd module. eventlet itself is responsible only for handling http protocol-level semantics; "web framework" concepts such as URL traversal and html rendering are implemented in a separate python package, [[mulib]].
 
== Limitations ==
 
* Not enough test coverage -- the goal is 100%, but we are not there yet.
* The SSL client does not properly connect to the SSL server, though both client and server interoperate with other SSL implementations (e.g. curl and apache).
** We could use a) a unit test that reproduces the bug (rather than the hand-testing we have been doing) and b) a fix for said bug.
* Not tested on Windows
** There are probably some simple Unix dependencies we introduced by accident.  If you're running Eventlet on Windows and run into errors, let us know.
** The eventlet.processes module is known to not work on Windows.
 
== Eventlet History ==
 
Eventlet began life as Donovan Preston was talking to Bob Ippolito about coroutine-based non-blocking networking frameworks in Python. Most non-blocking frameworks require you to run the "main loop" in order to perform all network operations, but Donovan wondered if a library written using a trampolining style could get away with transparently running the main loop any time i/o was required, stopping the main loop once no more i/o was scheduled. Bob spent a few days during PyCon 2006 writing a proof-of-concept. He named it eventlet, after the coroutine implementation it used, [http://cheeseshop.python.org/pypi/greenlet greenlet]. Donovan began using eventlet as a light-weight network library for his spare-time project [http://soundfarmer.com/Pavel/trunk/ Pavel], and also began writing some unittests.
 
* http://svn.red-bean.com/bob/eventlet/trunk/
 
When Donovan started at Linden Lab in May of 2006, he added eventlet as an svn external in the indra/lib/python directory, to be a dependency of the yet-to-be-named [[backbone]] project (at the time, it was named restserv). However, including eventlet as an svn external meant that any time the externally hosted project had hosting issues, Linden developers were not able to perform svn updates. Thus, the eventlet source was imported into the linden source tree at the same location, and became a fork.
 
Bob Ippolito has ceased working on eventlet and has stated his desire for Linden to take it's fork forward to the open source world as "the" eventlet.
 
== License ==
Eventlet is made available under the terms of the open source MIT license below.
 
'''EVENTLET'''
 
Copyright (c) 2005-2006, Bob Ippolito
 
Copyright (c) 2007, Linden Research, Inc.
 
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Latest revision as of 22:53, 12 February 2010

Eventlet

Eventlet is a networking library written in Python. It achieves high scalability and concurrency by using non-blocking io while at the same time retaining high programmer usability by using coroutines to make the non-blocking io operations appear blocking at the source code level.


Linden Lab open-sourced Eventlet in 2007, and it's been under continuous development since. Several applications have been built on top of Eventlet, such as Spawning and Proxylet.

Other resources

Article talks about coros, eventlet and spawning