Eventlet Documentation
**********************


Warning
=======

**New usages of eventlet are now heavily discouraged! Please read the
following.**

Eventlet was created almost 18 years ago, at a time where async
features were absent from the CPython stdlib. With time eventlet
evolved and CPython too, but since several years the maintenance
activity of eventlet decreased leading to a growing gap between
eventlet and the CPython implementation.

This gap is now too high and can lead you to unexpected side effects
and bugs in your applications.

Eventlet now follows a new maintenance policy. **Only maintenance for
stability and bug fixing** will be provided. **No new features will be
accepted**, except those related to the asyncio migration. **Usages in
new projects are discouraged**. **Our goal is to plan the retirement
of eventlet** and to give you ways to move away from eventlet.

If you are looking for a library to manage async network programming,
and if you do not yet use eventlet, then, we encourage you to use
asyncio, which is the official async library of the CPython stdlib.

If you already use eventlet, we hope to enable migration to asyncio
for some use cases; see Migrating off of Eventlet. Only new features
related to the migration solution will be accepted.

If you have questions concerning maintenance goals or concerning the
migration do not hesitate to open a new issue, we will be happy to
answer them.


Installation
============

The easiest way to get Eventlet is to use pip:

   pip install -U eventlet

To install latest development version once:

   pip install -U https://github.com/eventlet/eventlet/archive/master.zip


Usage
=====

Code talks!  This is a simple web crawler that fetches a bunch of urls
concurrently:

   urls = [
       "http://www.google.com/intl/en_ALL/images/logo.gif",
       "http://python.org/images/python-logo.gif",
       "http://us.i1.yimg.com/us.yimg.com/i/ww/beta/y3.gif",
   ]

   import eventlet
   from eventlet.green.urllib.request import urlopen

   def fetch(url):
       return urlopen(url).read()

   pool = eventlet.GreenPool()
   for body in pool.imap(fetch, urls):
       print("got body", len(body))


Supported Python Versions
=========================

Currently supporting CPython 3.9+.


Concepts & References
=====================

* Asyncio in Eventlet

  * Asyncio Compatibility

  * Asyncio Hub & Functions

  * Migrating from Eventlet to Asyncio

* Basic Usage

* Primary API

  * Greenthread Spawn

  * Greenthread Control

  * Patching Functions

  * Network Convenience Functions

* Design Patterns

  * Client Pattern

  * Server Pattern

  * Dispatch Pattern

* Greening The World

  * Import Green

  * Monkeypatching the Standard Library

* Examples

  * Web Crawler

  * WSGI Server

  * Echo Server

  * Socket Connect

  * Multi-User Chat Server

  * Feed Scraper

  * Port Forwarder

  * Recursive Web Crawler

  * Producer Consumer Web Crawler

  * Websocket Server Example

  * Websocket Multi-User Chat Example

* Using SSL With Eventlet

  * PyOpenSSL

* Threads

  * Tpool - Simple thread pool

* Zeromq

  * What is ØMQ?

  * API documentation

* Understanding Eventlet Hubs

  * "eventlet.hubs.use_hub()"

  * How the Hubs Work

  * More Hub-Related Functions

* Environment Variables

* fork() without execve()

  * "multiprocessing"

  * "oslo.service"

* Module Reference

  * "asyncio" - Integration with "asyncio"

  * "backdoor" -- Python interactive interpreter within a running
    process

  * "corolocal" -- Coroutine local storage

  * "dagpool" -- Dependency-Driven Greenthreads

  * Module Contents

  * "debug" -- Debugging tools for Eventlet

  * "db_pool" -- DBAPI 2 database connection pooling

  * "event" -- Cross-greenthread primitive

  * "greenpool" -- Green Thread Pools

  * "greenthread" -- Green Thread Implementation

  * "pools" - Generic pools of resources

  * "queue" -- Queue class

  * "semaphore" -- Semaphore classes

  * "timeout" -- Universal Timeouts

  * "websocket" -- Websocket Server

  * "wsgi" -- WSGI server

  * "eventlet.green.zmq" -- ØMQ support


Want to contribute?
===================

* How to Contribute to Eventlet

  * Report a Bug

  * Propose Changes

* Testing Eventlet

  * Doctests

  * Testing Eventlet Hubs

  * Writing Tests

  * Coverage

* Maintenance Process

  * Releases


License
=======

Eventlet is made available under the terms of the open source MIT
license


Changelog
=========

For further details about released versions of Eventlet please take a
look at the changelog.


Authors & History
=================

You have questions or you may have find a bug and you want to contact
authors or maintainers, then please take a look at Authors.

You want to learn more about the history of Eventlet, then, please
take a look at History.


Indices and tables
==================

* Index

* Module Index

* Search Page

* changelog
