diff options
author | Andy McCurdy <andy@andymccurdy.com> | 2019-02-04 17:44:39 -0800 |
---|---|---|
committer | Andy McCurdy <andy@andymccurdy.com> | 2019-02-04 17:45:27 -0800 |
commit | cfa2bc9b7ea860eb4a002eaa7029ecee01e39735 (patch) | |
tree | 9dc5d02bafeadb3278c6e58143454ffc27a7d3c8 /redis/utils.py | |
parent | a4644592162afdfe5b8809fa28eff041f7be6993 (diff) | |
download | redis-py-cfa2bc9b7ea860eb4a002eaa7029ecee01e39735.tar.gz |
attempt to provide only healthy connections from the pool
Adds redis.selector, a module that provides the best selector strategy
available on the current platform. A redis.selector polls a socket to
provide two pieces of functionality:
1. Check whether data can be read from the socket. Prior versions of redis-py
provided this behavior with just select.select(). select() has lots of
limitations, most notably a limit of ~1024 file descriptors. Now that
better selectors are available, this should make can_read() faster and
able to accomodate more clients. See #1115 and #486
2. Check whether a socket is ready for a command to be sent. This doubles
as a health check. It ensures that the socket is available for writing,
has no data to read and has no known errors. Anytime a socket is
disconnected or hung up, data is available to be read, typically zero bytes.
ConnectionPool.get_connection has been modified to ensure that connections
it returns are connected and are ready for a command to be sent. If
get_connection encounters a case where a socket isn't ready for a command
the connection is reconnected and checked again.
TODO: more tests for this stuff. implement EPoll and KQueue selectors.
Fixes #1115
Fixes #486
Diffstat (limited to 'redis/utils.py')
0 files changed, 0 insertions, 0 deletions