Is this trying to work-around CPU burn only when `timeout` is zero? If timeout is greater than 0, what's the harm of letting it proceed to `self._read_lock.acquire()`?

Sorry, I haven't sufficiently wrapped my brain around the underpinnings of the issue being worked around (despite the comment), and `sleep` in I/O code always troubles me.