Skip to main content

Elegant use of requests in gevent

Project description

gevent-requests: Asynchronous Requests


PyPI - License version pyversions PyPI - Downloads Pepy Total Downlods

gevent-requests allows you to use Requests with Gevent to make asynchronous HTTP Requests easily.

A fork from grequests <https://github.com/spyoungtech/grequests>.

It is highly recommended that you patch from the entry and do not include thread, this package does not include patch!

pip install gevent-requests

Usage is simple:

from gevent import monkey
monkey.patch_all(thread=False, select=False)
import gevent_requests

urls = [
    'http://www.heroku.com',
    'http://python-tablib.org',
    'http://httpbin.org',
    'https://shields.io',
    'http://fakedomain/',
]

Create a set of unsent Requests:

>>> rs = (gevent_requests.get(u) for u in urls)

Send them all at the same time:

>>> print(gevent_requests.gmap(rs))
[<Response [200]>, <Response [200]>, <Response [200]>, <Response [200]>, <Response [502]>]

Optionally, in the event of a timeout or any other exception during the connection of the request, you can add an exception handler that will be called with the request and exception inside the main thread:

>>> def exception_handler(request, exception):
...    print("Request failed")

>>> reqs = [
...    gevent_requests.get('http://httpbin.org/delay/1', timeout=0.001),
...    gevent_requests.get('http://fakedomain/'),
...    gevent_requests.get('http://httpbin.org/status/500')]
>>> print(gevent_requests.gmap(reqs, exception_handler=exception_handler))
Request failed
[None, <Response [502]>, <Response [500]>]

For some speed/performance gains, you may also want to use imap instead of map. imap returns a generator of responses. Order of these responses does not map to the order of the requests you send out. The API for imap is equivalent to the API for map.

Use indexed requests in gevent, use gimap_enumerate will yield a indexed requests just like enumerate return, an index and a response:

>>> rs = (gevent_requests.get(u) for u in urls)

>>> for i in gevent_requests.gimap_enumerate(rs, size=len(urls)):
        print(i)
(4, <Response [502]>)
(2, <Response [200]>)
(0, <Response [200]>)
(3, <Response [200]>)
(1, <Response [200]>)

Project details


Download files

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

Source Distribution

gevent_requests-1.1.2.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

gevent_requests-1.1.2-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

Details for the file gevent_requests-1.1.2.tar.gz.

File metadata

  • Download URL: gevent_requests-1.1.2.tar.gz
  • Upload date:
  • Size: 5.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.17.3 CPython/3.12.3 Darwin/23.5.0

File hashes

Hashes for gevent_requests-1.1.2.tar.gz
Algorithm Hash digest
SHA256 9dac139f1ff123125f1284afbd1340da341cca01133528613defaf54f56d3746
MD5 ffc06e08503b0a4d0a4d28990fde4ba7
BLAKE2b-256 96a43e03a6e6cbbf7ad1f9840c7b724bc24c00b4d133edaf880ee28f34a6100f

See more details on using hashes here.

File details

Details for the file gevent_requests-1.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for gevent_requests-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 12042f3b5d915b1f0ffc133ae288d18ae8b062068beb7d9cfc148521ad629fb7
MD5 2221a900b4837228db208aeab91d0984
BLAKE2b-256 0331b498485bfb824ae917448d2b0589e900e2b742ffaa3af8d6e65cf1fff5cc

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page