Do we need an event loop here at all?  Would it be cleaner here to just get rid of the `event_loop` and just poll the zmq socket directly? (http://zeromq.github.io/pyzmq/api/zmq.html#zmq.Socket.poll)

```
while not self.have_result and not timed_out():
  time_left = min(1000, self._deadline - time.time())
  if self._socket.poll(time_left):
   self._read_result()
   ..
```