Skip to main content

Coroutine-based network library

Project description

gevent

https://travis-ci.org/gevent/gevent.svg?branch=master https://ci.appveyor.com/api/projects/status/q4kl21ng2yo2ixur?svg=true https://coveralls.io/repos/gevent/gevent/badge.svg?branch=master&service=github

gevent is a coroutine -based Python networking library that uses greenlet to provide a high-level synchronous API on top of the libev or libuv event loop.

Features include:

gevent is inspired by eventlet but features a 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 was written by Denis Bilenko.

Since version 1.1, gevent is maintained by Jason Madden for NextThought with help from the contributors and is licensed under the MIT license.

See what’s new in the latest major release.

Check out the detailed changelog for this version.

Read the documentation online at http://www.gevent.org.

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

Installation and Requirements

Supported Platforms

gevent 1.3 runs on Python 2.7 and Python 3. Releases 3.4, 3.5 and 3.6 of Python 3 are supported. (Users of older versions of Python 2 need to install gevent 1.0.x (2.5), 1.1.x (2.6) or 1.2.x (<=2.7.8); gevent 1.2 can be installed on Python 3.3.) gevent requires the greenlet library and will install the cffi library by default on Windows.

gevent 1.3 also runs on PyPy 5.5 and above, although 5.9 or above is strongly recommended. On PyPy, there are no external dependencies.

gevent is tested on Windows, OS X, and Linux, and should run on most other Unix-like operating systems (e.g., FreeBSD, Solaris, etc.)

Note

On Windows using the libev backend, gevent is limited to a maximum of 1024 open sockets due to limitations in libev. This limitation should not exist with the default libuv backend.

Installation

Note

This section is about installing released versions of gevent as distributed on the Python Package Index

gevent and greenlet can both be installed with pip, e.g., pip install gevent. Installation using buildout is also supported.

On Windows, OS X, and Linux, both gevent and greenlet are distributed as binary wheels.

Tip

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

Tip

On Linux, you’ll need to install gevent from source if you wish to use the libuv loop implementation. This is because the manylinux1 specification for the distributed wheels does not support libuv. The cffi library must be installed at build time.

Installing From Source

If you are unable to use the binary wheels (for platforms where no pre-built wheels are available or if wheel installation is disabled, e.g., for libuv support on Linux), here are some things you need to know.

  • You can install gevent from source with pip install --no-binary gevent gevent.
  • You’ll need a working C compiler that can build Python extensions. On some platforms, you may need to install Python development packages.
  • Installing from source requires setuptools. This is installed automatically in virtual environments and by buildout. However, gevent uses PEP 496 environment markers in setup.py. Consequently, you’ll need a version of setuptools newer than 25 (mid 2016) to install gevent from source; a version that’s too old will produce a ValueError. Older versions of pipenv may also have issues installing gevent for this reason.
  • To build the libuv backend (which is required on Windows and optional elsewhere), or the CFFI-based libev backend, you must install cffi before attempting to install gevent on CPython (on PyPy this step is not necessary).

Common Installation Issues

The following are some common installation problems and solutions for those compiling gevent from source.

  • Some Linux distributions are now mounting their temporary directories with the noexec option. This can cause a standard pip install gevent to fail with an error like cannot run C compiled programs. One fix is to mount the temporary directory without that option. Another may be to use the --build option to pip install to specify another directory. See issue #570 and issue #612 for examples.
  • Also check for conflicts with environment variables like CFLAGS. For example, see Library Updates.
  • Users of a recent SmartOS release may need to customize the CPPFLAGS (the environment variable containing the default options for the C preprocessor) if they are using the libev shipped with gevent. See Operating Systems for more information.
  • If you see ValueError: ("Expected ',' or end-of-list in", "cffi >= 1.11.5 ; sys_platform == 'win32' and platform_python_implementation == 'CPython'", 'at', " ; sys_platform == 'win32' and platform_python_implementation == 'CPython'"), the version of setuptools is too old. Install a more recent version of setuptools.

Extra Dependencies

gevent has no runtime dependencies outside the standard library, greenlet and (on some platforms) cffi. However, there are a number of additional libraries that extend gevent’s functionality and will be used if they are available.

The psutil library is needed to monitor memory usage.

zope.event is highly recommended for configurable event support; it can be installed with the events extra, e.g., pip install gevent[events].

dnspython is required for the new pure-Python resolver, and on Python 2, so is idna. They can be installed with the dnspython extra.

Development

To install the latest development version:

pip install setuptools cffi 'cython>=0.28' git+git://github.com/gevent/gevent.git#egg=gevent

Note

You will not be able to run gevent’s test suite using that method.

To hack on gevent (using a virtualenv):

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

Note

The notes above about installing from source apply here as well. The dev-requirements.txt file takes care of the library prerequisites (CFFI, Cython), but having a working C compiler that can create Python extensions is up to you.

Running Tests

There are a few different ways to run the tests. To simply run the tests on one version of Python during development, begin with the above instructions to install gevent in a virtual environment and then run:

(env) $ cd src/greentest
(env) $ python ./testrunner.py

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
tox

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

cd src/greentest
python testrunner.py --coverage
coverage combine
coverage html -i
<open htmlcov/index.html>

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.

https://travis-ci.org/gevent/gevent.svg?branch=master https://ci.appveyor.com/api/projects/status/q4kl21ng2yo2ixur?svg=true

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

https://coveralls.io/repos/gevent/gevent/badge.svg?branch=master&service=github

Note

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
gevent-1.3.7-cp27-cp27m-macosx_10_9_x86_64.whl (2.3 MB) Copy SHA256 hash SHA256 Wheel cp27
gevent-1.3.7-cp27-cp27m-manylinux1_x86_64.whl (4.2 MB) Copy SHA256 hash SHA256 Wheel cp27
gevent-1.3.7-cp27-cp27mu-manylinux1_x86_64.whl (4.2 MB) Copy SHA256 hash SHA256 Wheel cp27
gevent-1.3.7-cp27-cp27m-win32.whl (2.0 MB) Copy SHA256 hash SHA256 Wheel cp27
gevent-1.3.7-cp27-cp27m-win_amd64.whl (2.1 MB) Copy SHA256 hash SHA256 Wheel cp27
gevent-1.3.7-cp34-cp34m-macosx_10_6_intel.whl (3.2 MB) Copy SHA256 hash SHA256 Wheel cp34
gevent-1.3.7-cp34-cp34m-manylinux1_x86_64.whl (4.5 MB) Copy SHA256 hash SHA256 Wheel cp34
gevent-1.3.7-cp34-cp34m-win32.whl (2.0 MB) Copy SHA256 hash SHA256 Wheel cp34
gevent-1.3.7-cp34-cp34m-win_amd64.whl (2.1 MB) Copy SHA256 hash SHA256 Wheel cp34
gevent-1.3.7-cp35-cp35m-macosx_10_6_intel.whl (3.2 MB) Copy SHA256 hash SHA256 Wheel cp35
gevent-1.3.7-cp35-cp35m-manylinux1_x86_64.whl (4.4 MB) Copy SHA256 hash SHA256 Wheel cp35
gevent-1.3.7-cp35-cp35m-win32.whl (1.9 MB) Copy SHA256 hash SHA256 Wheel cp35
gevent-1.3.7-cp35-cp35m-win_amd64.whl (2.1 MB) Copy SHA256 hash SHA256 Wheel cp35
gevent-1.3.7-cp36-cp36m-macosx_10_6_intel.whl (3.3 MB) Copy SHA256 hash SHA256 Wheel cp36
gevent-1.3.7-cp36-cp36m-manylinux1_x86_64.whl (4.5 MB) Copy SHA256 hash SHA256 Wheel cp36
gevent-1.3.7-cp36-cp36m-win32.whl (2.0 MB) Copy SHA256 hash SHA256 Wheel cp36
gevent-1.3.7-cp36-cp36m-win_amd64.whl (2.1 MB) Copy SHA256 hash SHA256 Wheel cp36
gevent-1.3.7-cp37-cp37m-macosx_10_9_x86_64.whl (2.3 MB) Copy SHA256 hash SHA256 Wheel cp37
gevent-1.3.7-cp37-cp37m-manylinux1_x86_64.whl (4.5 MB) Copy SHA256 hash SHA256 Wheel cp37
gevent-1.3.7-cp37-cp37m-win_amd64.whl (2.1 MB) Copy SHA256 hash SHA256 Wheel cp37
gevent-1.3.7-pp259-pypy_41-win32.whl (676.5 kB) Copy SHA256 hash SHA256 Wheel pp259
gevent-1.3.7-pp260-pypy_41-macosx_10_14_x86_64.whl (699.2 kB) Copy SHA256 hash SHA256 Wheel pp260
gevent-1.3.7.tar.gz (4.6 MB) Copy SHA256 hash SHA256 Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page