HTTP/2 302
server: nginx
date: Wed, 14 Jan 2026 23:07:22 GMT
content-type: text/plain; charset=utf-8
content-length: 0
x-archive-redirect-reason: found capture at 20110106032934
location: https://web.archive.org/web/20110106032934/https://eventlet.net/
server-timing: captures_list;dur=0.729445, exclusion.robots;dur=0.063536, exclusion.robots.policy;dur=0.048535, esindex;dur=0.013791, cdx.remote;dur=6.926887, LoadShardBlock;dur=134.362247, PetaboxLoader3.datanode;dur=75.421961, PetaboxLoader3.resolve;dur=7.114277
x-app-server: wwwb-app242-dc8
x-ts: 302
x-tr: 177
server-timing: TR;dur=0,Tw;dur=0,Tc;dur=0
set-cookie: wb-p-SERVER=wwwb-app242; path=/
x-location: All
x-as: 14061
x-rl: 0
x-na: 0
x-page-cache: MISS
server-timing: MISS
x-nid: DigitalOcean
referrer-policy: no-referrer-when-downgrade
permissions-policy: interest-cohort=()
HTTP/2 200
server: nginx
date: Wed, 14 Jan 2026 23:07:23 GMT
content-type: text/html
x-archive-orig-date: Wed, 05 Jan 2011 18:22:43 GMT
x-archive-orig-server: Apache/2.2.9 (Debian) DAV/2 SVN/1.5.1 mod_ssl/2.2.9 OpenSSL/0.9.8g mod_wsgi/2.0 Python/2.4.6
x-archive-orig-last-modified: Fri, 22 Oct 2010 20:00:03 GMT
x-archive-orig-etag: "8804c-196a-4933a169396c0"
x-archive-orig-accept-ranges: bytes
x-archive-orig-content-length: 6506
x-archive-orig-age: 32811
x-archive-orig-x-cache: HIT from slacker.quxmore.com
x-archive-orig-x-cache-lookup: HIT from slacker.quxmore.com:80
x-archive-orig-via: 1.1 slacker.quxmore.com:80 (squid/2.7.STABLE3)
x-archive-orig-connection: close
x-archive-guessed-content-type: text/html
x-archive-guessed-charset: iso-8859-7
memento-datetime: Thu, 06 Jan 2011 03:29:34 GMT
link:
; rel="original",
; rel="timemap"; type="application/link-format",
; rel="timegate"
content-security-policy: default-src 'self' 'unsafe-eval' 'unsafe-inline' data: blob: archive.org web.archive.org web-static.archive.org wayback-api.archive.org athena.archive.org analytics.archive.org pragma.archivelab.org wwwb-events.archive.org
x-archive-src: NET-20110106014844786-00044-00056-ia360934/NET-20110106031339962-00056-22220~ia360934.us.archive.org~9443.warc.gz
server-timing: captures_list;dur=0.860882, exclusion.robots;dur=0.039959, exclusion.robots.policy;dur=0.021484, esindex;dur=0.020853, cdx.remote;dur=9.518645, LoadShardBlock;dur=123.809878, PetaboxLoader3.datanode;dur=74.183146, PetaboxLoader3.resolve;dur=48.116826, load_resource;dur=86.839212
x-app-server: wwwb-app242-dc8
x-ts: 200
x-tr: 275
server-timing: TR;dur=0,Tw;dur=0,Tc;dur=0
x-location: All
x-as: 14061
x-rl: 0
x-na: 0
x-page-cache: MISS
server-timing: MISS
x-nid: DigitalOcean
referrer-policy: no-referrer-when-downgrade
permissions-policy: interest-cohort=()
content-encoding: gzip
Eventlet Networking Library
Eventlet
Eventlet is a concurrent networking library for Python that allows you to change how you run your code, not how you write it.
It uses epoll or libevent for highly scalable non-blocking I/O .
Coroutines ensure that the developer uses a blocking style of programming that is similar to threading, but provide the benefits of non-blocking I/O.
The event dispatch is implicit, which means you can easily use Eventlet from the Python interpreter, or as a small part of a larger application.
It's easy to get started using Eventlet, and easy to convert existing applications to use it. Start off by looking at examples , common design patterns , and the list of the basic API primitives .
Installation
To install eventlet, simply:
easy_install eventlet
Alternately, you can download the source tarball from PyPi :
Discussion
eventletdev at lists.secondlife.com
This is a relatively low-traffic list about using and developing eventlet. Look through the archives for some useful information and possible answers to questions.
There's an IRC channel dedicated to eventlet: #eventlet on freenode . It's a pretty chill place to hang out!
Development
trunk repository
We use Mercurial for our source control, hosted by BitBucket. It's easy to branch off the main repository and contribute patches, tests, and documentation back upstream.
Bugs
Bug Report Form
No registration is required. Please be sure to report bugs as effectively as possible , to ensure that we understand and act on them quickly.
Web Crawler Example
This is a simple web “crawler” that fetches a bunch of urls using a coroutine pool. It has as much concurrency (i.e. pages being fetched simultaneously) as coroutines in the pool.
urls = [ "https://www.google.com/intl/en_ALL/images/logo.gif" ,
"https://wiki.secondlife.com/w/images/secondlife.jpg" ,
"https://us.i1.yimg.com/us.yimg.com/i/ww/beta/y3.gif" ]
import eventlet
from eventlet.green import urllib2
def fetch ( url ):
return urllib2 . urlopen ( url ) . read ()
pool = eventlet . GreenPool ()
for body in pool . imap ( fetch , urls ):
print "got body" , len ( body )
Stats