182 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			182 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<!doctype html>
 | 
						|
 | 
						|
<html lang="en">
 | 
						|
  <head>
 | 
						|
    <meta charset="UTF-8" />
 | 
						|
 | 
						|
    <title>Eventlet Networking Library</title>
 | 
						|
    <link rel="stylesheet" href="doc/_static/default.css" type="text/css" />
 | 
						|
    <link rel="stylesheet" href="doc/_static/pygments.css" type="text/css" />
 | 
						|
    <link rel="stylesheet" href="https://yandex.st/highlightjs/7.3/styles/default.min.css">
 | 
						|
    <link rel="top" title="Eventlet Networking Library" href="" />
 | 
						|
  </head>
 | 
						|
  <body>
 | 
						|
  <script>
 | 
						|
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
 | 
						|
    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
 | 
						|
    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
 | 
						|
    })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
 | 
						|
 | 
						|
    ga('create', 'UA-42952223-1', 'eventlet.net');
 | 
						|
    ga('send', 'pageview');
 | 
						|
  </script>
 | 
						|
 | 
						|
    <div class="document">
 | 
						|
      <div class="documentwrapper">
 | 
						|
        <div class="bodywrapper">
 | 
						|
          <div class="body">
 | 
						|
 | 
						|
  <div class="section" id="eventlet">
 | 
						|
<h1>Eventlet</h1>
 | 
						|
 | 
						|
<p>Eventlet is a concurrent networking library for Python that allows you to change how you run your code, not how you write it.</p>
 | 
						|
 | 
						|
<ul>
 | 
						|
<li>It uses epoll or kqueue or libevent for <a class="reference external" target="_blank" href="http://en.wikipedia.org/wiki/Asynchronous_I/O#Select.28.2Fpoll.29_loops">highly scalable non-blocking I/O</a>.</li>
 | 
						|
<li><a class="reference external" target="_blank" href="http://en.wikipedia.org/wiki/Coroutine">Coroutines</a> ensure that the developer uses a blocking style of programming that is similar to threading, but provide the benefits of non-blocking I/O.</li>
 | 
						|
<li>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.</li>
 | 
						|
</ul>
 | 
						|
 | 
						|
<p>It's easy to get started using Eventlet, and easy to convert existing applications to use it. Start off by looking at <a href="doc/examples.html">examples</a>, <a href="doc/design_patterns.html">common design patterns</a>, and the list of the <a href="doc/basic_usage.html">basic API primitives</a>.</p>
 | 
						|
 | 
						|
<p>License: MIT.</p>
 | 
						|
 | 
						|
<h3><a href="doc/">API Documentation</a></h3>
 | 
						|
 | 
						|
 | 
						|
<h3>Installation</h3>
 | 
						|
 | 
						|
<p>To install Eventlet, simply:
 | 
						|
<pre>
 | 
						|
pip install eventlet
 | 
						|
</pre></p>
 | 
						|
 | 
						|
<p>Alternately, you can download the source archive:</p>
 | 
						|
<ul>
 | 
						|
<li>latest release from <a class="reference external" target="_blank" href="https://pypi.python.org/pypi/eventlet/">PyPi</a>:
 | 
						|
  <a class="reference external" href="https://pypi.python.org/packages/source/e/eventlet/eventlet-0.19.0.tar.gz">eventlet-0.19.0.tar.gz</a></li>
 | 
						|
<li>or <a class="reference external" href="https://github.com/eventlet/eventlet/archive/master.zip">latest development version</a></li>
 | 
						|
</ul>
 | 
						|
 | 
						|
 | 
						|
<h3>Discussion</h3>
 | 
						|
 | 
						|
<ul>
 | 
						|
<li>
 | 
						|
  <p><a class="reference external" target="_blank" href="https://lists.secondlife.com/cgi-bin/mailman/listinfo/eventletdev">eventletdev at lists.secondlife.com</a></p>
 | 
						|
  <p>This is a low traffic list about using and developing Eventlet. Look through the <a class="reference external" target="_blank" href="https://lists.secondlife.com/pipermail/eventletdev/">archives</a> for some useful information and possible answers to questions.</p>
 | 
						|
</li>
 | 
						|
<li>There's an IRC channel dedicated to Eventlet: <a class="reference external" target="_blank" href="irc://kubrick.freenode.net/#eventlet">#eventlet on freenode</a>.  It's a pretty chill place to hang out!</li>
 | 
						|
<li>We have <a class="reference external" target="_blank" href="https://plus.google.com/communities/102444398246193806164">Eventlet Google+ Community</a>. Join us, +1, share your ideas, report bugs, find new friends or even new job!</li>
 | 
						|
</ul>
 | 
						|
 | 
						|
 | 
						|
<h3>Development</h3>
 | 
						|
 | 
						|
<ul>
 | 
						|
<li><a class="reference" target="_blank" href="https://github.com/eventlet/eventlet/">Eventlet on Github</a></li>
 | 
						|
<li><a class="reference external" target="_blank" href="https://bitbucket.org/eventlet/eventlet/">Mercurial on Bitbucket</a>, "eventually consistent" mirror.</li>
 | 
						|
</ul>
 | 
						|
<p>Both repositories are equal and kept in sync.
 | 
						|
  You can use whichever you fancy for downloading, forking, reporting issues and submitting pull requests.</p>
 | 
						|
<p>Mercurial repository used to be the main one, but most of the contribution and discussions happen on Github nowadays.</p>
 | 
						|
 | 
						|
<h4>Pull request policy</h4>
 | 
						|
<ul>
 | 
						|
  <li>Test is required</li>
 | 
						|
  <li>One commit is strongly preferred, except for very big changes</li>
 | 
						|
  <li>Commit message should follow the following formula:
 | 
						|
<pre>
 | 
						|
subsystem: description of why the change is useful
 | 
						|
 | 
						|
optional details or links to related issues or websites
 | 
						|
</pre>
 | 
						|
    The <em>why</em> part is very important. Diff already says <em>what</em> you have done. But nobody knows why.
 | 
						|
  </li>
 | 
						|
  <li>Feel free to append yourself into AUTHORS file, sections Thanks To or Contributors.
 | 
						|
</ul>
 | 
						|
<p>If you don't like these rules, raw patches are more than welcome!</p>
 | 
						|
 | 
						|
 | 
						|
<h4>Bugs</h4>
 | 
						|
 | 
						|
<p>Please be sure to report bugs <a class="reference external" target="_blank" href="http://www.chiark.greenend.org.uk/~sgtatham/bugs.html">as effectively as possible</a>, to ensure that we understand and act on them quickly.</p>
 | 
						|
 | 
						|
<p>You may report bugs via:
 | 
						|
<ol>
 | 
						|
  <li><a class="reference external" target="_blank" href="https://github.com/eventlet/eventlet/issues/new">Github</a></li>
 | 
						|
  <li><a class="reference external" target="_blank" href="https://bitbucket.org/eventlet/eventlet/issues/new/">Bitbucket</a> (no registration is required)</li>
 | 
						|
  <li><a class="reference external" target="_blank" href="mailto:eventletdev@lists.secondlife.com">Email eventletdev@lists.secondlife.com</a></li>
 | 
						|
</ol>
 | 
						|
 | 
						|
 | 
						|
<div class="section" id="web-crawler-example">
 | 
						|
<h2>Web Crawler Example<a class="headerlink" href="#web-crawler-example" title="Permalink to this headline">¶</a></h2>
 | 
						|
<p>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.</p>
 | 
						|
 | 
						|
<pre><code class="language-python">import eventlet
 | 
						|
from eventlet.green import urllib2
 | 
						|
 | 
						|
 | 
						|
urls = [
 | 
						|
    "http://www.google.com/intl/en_ALL/images/logo.gif",
 | 
						|
    "https://wiki.secondlife.com/w/images/secondlife.jpg",
 | 
						|
    "http://us.i1.yimg.com/us.yimg.com/i/ww/beta/y3.gif",
 | 
						|
]
 | 
						|
 | 
						|
 | 
						|
def fetch(url):
 | 
						|
    return urllib2.urlopen(url).read()
 | 
						|
 | 
						|
 | 
						|
pool = eventlet.GreenPool()
 | 
						|
 | 
						|
for body in pool.imap(fetch, urls):
 | 
						|
    print("got body", len(body))
 | 
						|
</code></pre>
 | 
						|
 | 
						|
 | 
						|
<h3>Stats</h3>
 | 
						|
<p><a class="reference external" target="_blank" href="https://travis-ci.org/eventlet/eventlet"><img alt="Travis build" src="https://travis-ci.org/eventlet/eventlet.svg?branch=master"></a></p>
 | 
						|
 | 
						|
<!--
 | 
						|
Here we insert Ohloh Project Basic Stats widget.
 | 
						|
<script src="http://www.ohloh.net/p/480234/widgets/project_basic_stats.js"></script>
 | 
						|
 | 
						|
Unfortunately, they use blocking javascript with document.write() which is a bit unacceptable.
 | 
						|
So instead I inserted the result of javascript write. It's not public API, so it may break in future.
 | 
						|
In case iframe is broken, try visiting script again and copy updated html from there.
 | 
						|
-->
 | 
						|
<iframe src="http://www.ohloh.net/p/480234/widgets/project_basic_stats.html" scrolling="no" marginHeight=0 marginWidth=0 style="height: 225px; width: 350px; border: none;"></iframe>
 | 
						|
</div>
 | 
						|
</div>
 | 
						|
</div>
 | 
						|
 | 
						|
 | 
						|
<div class="section" id="contents">
 | 
						|
</div>
 | 
						|
</div>
 | 
						|
</div>
 | 
						|
</div>
 | 
						|
<div class="sphinxsidebar">
 | 
						|
<div class="sphinxsidebarwrapper">
 | 
						|
<h3>Links</h3>
 | 
						|
<ul>
 | 
						|
<li><a class="reference external" href="doc/">Documentation</a></li>
 | 
						|
<li><a class="reference external" href="doc/changelog.html">Changelog</a></li>
 | 
						|
<li><a class="reference external" target="_blank" href="https://plus.google.com/communities/102444398246193806164">Google+ community</a></li>
 | 
						|
<li><a class="reference external" target="_blank" href="https://github.com/eventlet/eventlet/">Eventlet on Github</a></li>
 | 
						|
<li><a class="reference external" target="_blank" href="https://bitbucket.org/eventlet/eventlet/">Eventlet on Bitbucket</a></li>
 | 
						|
<li><a class="reference external" target="_blank" href="https://lists.secondlife.com/pipermail/eventletdev/">Mailing List Archives</a></li>
 | 
						|
<li><a class="reference external" target="_blank" href="http://build.eventlet.net/">Automated Builds</a></li>
 | 
						|
<li><a class="reference external" target="_blank" href="irc://chat.freenode.net/#eventlet">IRC channel</a></li>
 | 
						|
<li><a class="reference external" target="_blank" href="http://blog.eventlet.net/">Blog (archive)</a></li>
 | 
						|
</ul>
 | 
						|
        </div>
 | 
						|
      </div>
 | 
						|
    </div>
 | 
						|
    <script src="//yandex.st/highlightjs/7.3/highlight.min.js"></script>
 | 
						|
    <script>hljs.initHighlightingOnLoad();</script>
 | 
						|
  </body>
 | 
						|
</html>
 |