summaryrefslogtreecommitdiff
path: root/redis/selector.py
Commit message (Collapse)AuthorAgeFilesLines
* 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