Current this implementation didn't consider the timeout, we definitely should add timeout to our implementation. Since the loop doesn't support for configuring timeout, maybe we should use ZMQPoller here instead of ioloo, like:
```
while not self.have_result and not timed_out():
  time_left = min(1000, self._deadline - time.time())
  if self._poller.poll(time_left):
   self._read_result()
   ..
```
If we still want to poll on multiple sockets instead of single socket. Otherwise, we could use the way you proposed(polling on single socket).