> The idea is rather than calling a cassandra client function like > get_slice(), call the send_get_slice() then have a non blocking wait on the > socket thrift is using, then call recv_get_slice().
(disclaimer: I've never used tornado) Without looking at the generated thrift code, this sounds dangerous. What happens if send_get_slice() blocks? What happens if recv_get_slice() has to block because you didn't happen to receive the response in one packet? Normally you're either doing blocking code or callback oriented reactive code. It sounds like you're trying to use blocking calls in a non-blocking context under the assumption that readable data on the socket means the entire response is readable, and that the socket being writable means that the entire request can be written without blocking. This might seems to work and you may not block, or block only briefly. Until, for example, a TCP connection stalls and your entire event loop hangs due to a blocking read. Apologies if I'm misunderstanding what you're trying to do. -- / Peter Schuller