Coroutine-based concurrency library for Python
Python Other
Latest commit 3a3124e Apr 7, 2017 @jamadden jamadden Add basic framework for wrapping stdlib tests.
Use it to fix test_interrupted_write on all Py3, and
test_https_with_cafile on PyPy3.5 instead of disabling them and
patching them inline, respectively.

See #964
Failed to load latest commit information.
.github Add May 27, 2016
appveyor fix the name of corecext in sys.modules. Apr 5, 2016
benchmarks restore the microbenchmarks that used the missing run -> wait [skip ci] Dec 11, 2015
deps restore missing ares_build.h Dec 8, 2016
doc Clean up _DummyThread for greenlet.greenlet Dec 28, 2016
examples one more place to use localhost for appveyor clarity in tests Jan 15, 2017
scripts Update to PyPy3.5 5.7.1 (#965) Apr 7, 2017
src Add basic framework for wrapping stdlib tests. Apr 7, 2017
util Replace optparse with argparse Mar 10, 2017
.gitignore Clean up _DummyThread for greenlet.greenlet Dec 28, 2016
.landscape.yml Disable python 3 coverage on landscape, that may be what's keeping ou… Dec 10, 2016
.pylintrc Work on the reported ref count leaks for TPE. Apr 1, 2016
.travis.yml Rollback PyPy3, add changenotes, enable other builds Apr 6, 2017
AUTHORS Version bump and changelog cleanup. [skip ci] Jun 29, 2015
CHANGES.rst Update to PyPy3.5 5.7.1 (#965) Apr 7, 2017
CONTRIBUTING.rst Add basic initial CONTRIBUTING.rst per github guidelines. Add badges … Mar 16, 2016
LICENSE Tweak license formatting Mar 16, 2017 manifest cleanups Dec 23, 2016
Makefile Update to PyPy3.5 5.7.1 (#965) Apr 7, 2017
NOTICE Add PSF license and copyright notice as per the PSF license agreement… Mar 16, 2016
README.rst Support a MAKE environment variable to use gmake. Fixes #888 Nov 28, 2016
TODO correct links to point to the right repo May 18, 2015 Invoke 'sh' instead of '/bin/sh' in deps setup May 23, 2016 Invoke 'sh' instead of '/bin/sh' in deps setup May 23, 2016 Support a MAKE environment variable to use gmake. Fixes #888 Nov 28, 2016
appveyor.yml Add --quiet option to and use it on CI Mar 9, 2017
dev-requirements.txt Tweak timeout on CI. Oct 27, 2016
rtd-requirements.txt Note dependency on Cython 0.23.4 or above, and revert semaphore worka… Oct 10, 2015
setup.cfg Let zest.releaser know where to get the version Dec 23, 2016 Add 3.6 classifier. [skip ci] Jan 19, 2017
tox.ini Add PyPy3 to travis config; disable most other builds for testing pur… Oct 22, 2016



gevent is a coroutine-based Python networking library.

Features include:

  • Fast event loop based on libev.
  • Lightweight execution units based on greenlet.
  • Familiar API that re-uses concepts from the Python standard library.
  • Cooperative sockets with SSL support.
  • DNS queries performed through c-ares or a threadpool.
  • Ability to use standard library and 3rd party modules written for standard blocking sockets

gevent is inspired by eventlet but features more consistent API, simpler implementation and better performance. Read why others use gevent and check out the list of the open source projects based on gevent.

gevent is licensed under the MIT license.

See what's new in the latest major release.

Check out the detailed changelog for this version.

Get gevent

gevent runs on Python >= 2.7, Python >= 3.4, or PyPy >= 5.5 (including PyPy2 and PyPy3) (Note: PyPy is not supported in Windows). On all platforms, installing setuptools is required (this is done automatically if working in a virtual environment).

You can use pip to install gevent:

pip install gevent


You need Pip 8.0 or later to install the binary wheels.

Download the latest release from Python Package Index or clone the repository.

Read the documentation online at Additional installation information can be found here.

Post feedback and issues on the bug tracker, mailing list, blog and twitter (@gevent).


To install the latest development version:

pip install setuptools 'cython>=0.25' git+git://

To hack on gevent (using a virtualenv):

$ git clone
$ cd gevent
$ virtualenv env
$ source env/bin/activate
(env) $ pip install -r dev-requirements.txt


You must have Cython, GNU Make, a C compiler, and the Python development headers installed to build a checkout. Installing CFFI on CPython (it's standard on PyPy) allows building the CFFI backend for testing, and tox is the command used to test multiple versions of Python.

BSD based systems like FreeBSD and OpenBSD often have BSD Make on the PATH as the default make command, but building gevent from a source checkout (not a source tarball distributed on PyPI) requires GNU Make. GNU Make is often called gmake. If you experience Makefile-related problems building gevent from source on one of these platforms, you can set the MAKE environment variable to the executable that invokes GNU Make. For example:

$ MAKE=gmake python ./ install

Running Tests

There are a few different ways to run the tests. To simply run the tests on one version of Python during development, try this:

python develop
cd src/greentest
PYTHONPATH=.. python --config

Before submitting a pull request, it's a good idea to run the tests across all supported versions of Python, and to check the code quality using prospector. This is what is done on Travis CI. Locally it can be done using tox:

pip install tox

The testrunner accepts a --coverage argument to enable code coverage metrics through the package. That would go something like this:

cd src/greentest
PYTHONPATH=.. python --config --coverage
coverage combine
coverage html -i
<open htmlcov/index.html>

Builds on Travis CI automatically submit updates to to monitor test coverage.

Likewise, builds on Travis CI will automatically submit updates to to monitor code health (adherence to PEP8, absence of common code smells, etc).

Code Health


On Debian, you will probably need libpythonX.Y-testsuite installed to run all the tests.

Continuous integration

A test suite is run for every push and pull request submitted. Travis CI is used to test on Linux, and AppVeyor runs the builds on Windows.