Elegant use of requests in gevent
Project description
gevent-requests: Asynchronous Requests
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
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9dac139f1ff123125f1284afbd1340da341cca01133528613defaf54f56d3746 |
|
MD5 | ffc06e08503b0a4d0a4d28990fde4ba7 |
|
BLAKE2b-256 | 96a43e03a6e6cbbf7ad1f9840c7b724bc24c00b4d133edaf880ee28f34a6100f |
File details
Details for the file gevent_requests-1.1.2-py3-none-any.whl
.
File metadata
- Download URL: gevent_requests-1.1.2-py3-none-any.whl
- Upload date:
- Size: 5.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: pdm/2.17.3 CPython/3.12.3 Darwin/23.5.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 12042f3b5d915b1f0ffc133ae288d18ae8b062068beb7d9cfc148521ad629fb7 |
|
MD5 | 2221a900b4837228db208aeab91d0984 |
|
BLAKE2b-256 | 0331b498485bfb824ae917448d2b0589e900e2b742ffaa3af8d6e65cf1fff5cc |