The Ruby and Python clients will block if you try to fetch the next change and there isn't one available. You can prevent this by using a separate thread for the blocking request. The node.js client uses a callback.
We're currently considering alternatives. See <https://github.com/rethinkdb/rethinkdb/issues/3298>.