summaryrefslogtreecommitdiff
path: root/redis/selector.py
Commit message (Collapse)AuthorAgeFilesLines
* Use nonblocking sockets instead of selectors for healthy connectionsAndy McCurdy2019-07-091-196/+0
| | | | | | | This replaces the work in 3.2.0 to use nonblocking sockets instead of selectors. Selectors proved to be problematic for some environments including eventlet and gevent. Nonblocking sockets should be available in all environments.
* Unregister socket from ready_pollerBruce Merry2019-03-181-1/+1
| | | | | It looks like there was a typo in PollSelector.close that made it unregister from the read_poller twice instead of once from each poller.
* test all selectors via pytest parameterizationhealty_connectionsAndy McCurdy2019-02-111-20/+29
|
* python2 compatAndy McCurdy2019-02-041-1/+1
|
* attempt to provide only healthy connections from the poolAndy McCurdy2019-02-041-0/+187
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