def wait_for_send(self, timeout=-1): """wait for pyzmq send to complete. This is necessary when sending arrays that you intend to edit in-place. `timeout` is in seconds, and will raise TimeoutError if it is reached before the send completes. """ if not self._sent_event.is_set(): if timeout and timeout < 0: # Event doesn't like timeout < 0 timeout = None # wait for Future to indicate send having been called, # which means MessageTracker is ready. tic = time.time() if not self._sent_event.wait(timeout): raise error.TimeoutError("Still waiting to be sent") return False if timeout: timeout = max(0, timeout - (time.time() - tic)) try: if timeout is None: # MessageTracker doesn't like timeout=None timeout = -1 return self._tracker.wait(timeout) except zmq.NotDone: raise error.TimeoutError("Still waiting to be sent")
def get(self, timeout=-1): """Return the result when it arrives. If `timeout` is not ``None`` and the result does not arrive within `timeout` seconds then ``TimeoutError`` is raised. If the remote call raised an exception then that exception will be reraised by get() inside a `RemoteError`. """ if not self.ready(): self.wait(timeout) if self._ready: if self._success: return self._result else: raise self._exception else: raise error.TimeoutError("Result not ready.")
def check_ready(f, self, *args, **kwargs): """Check ready state prior to calling the method.""" self.wait(0) if not self._ready: raise error.TimeoutError("result not ready") return f(self, *args, **kwargs)
def _check_ready(self): if not self.ready(): raise error.TimeoutError("Result not ready.")