コード例 #1
0
    def __poll_socket(self, socket: zmq.Socket) -> int:
        waited_time = timedelta()

        report_timeout_ms = self.REPORT_TIMEOUT / timedelta(milliseconds=1)
        while socket.poll(report_timeout_ms) == 0:
            waited_time += self.REPORT_TIMEOUT
            logger.warning(f"Polled socket for {waited_time}")

            if waited_time >= self.MAX_SOCKET_TIMEOUT:
                raise ConnectionException(f"Polling timed out")

        return socket.poll()
コード例 #2
0
def zmq_import_poll(sock: zmq.Socket, timeout: float):
    """
    Author:
    Alexander Heilmeier

    Description:
    Handles incoming ZMQ messages and allows polling.

    Inputs:
    sock:       ZMQ socket (see below how to create it)
    timeout:    [s] timeout for polling

    How to create a ZMQ socket to import data?
    import zmq
    zmq_context = zmq.Context()
    sock = zmq_context.socket(zmq.PUB)
    sock.connect("tcp://%s:%s" % (ip, port))
    sock.setsockopt_string(zmq.SUBSCRIBE, zmq_topic])
    """

    # ------------------------------------------------------------------------------------------------------------------
    # PREPARATION ----------------------------------------------------------------------------------------------------
    # ------------------------------------------------------------------------------------------------------------------

    # timeout conversion s -> ms
    timeout *= 1000.0

    # set standard return
    data = None

    # ------------------------------------------------------------------------------------------------------------------
    # CHECK IF BUFFER ALREADY STORES VALUES ----------------------------------------------------------------------------
    # ------------------------------------------------------------------------------------------------------------------

    # non blocking socket to empty buffer
    try:
        while True:
            sock.recv_string(flags=zmq.NOBLOCK)
            data = sock.recv_pyobj(flags=zmq.NOBLOCK)
    except zmq.Again:
        pass

    # ------------------------------------------------------------------------------------------------------------------
    # WAIT FOR A SHORT TIME IF NO DATA WAS STORED IN THE BUFFER --------------------------------------------------------
    # ------------------------------------------------------------------------------------------------------------------

    if data is None:
        # use poll to be able to set a timeout -> will return 1 if an event occurs, otherwise 0
        events = sock.poll(timeout=timeout)

        if events:
            # non blocking socket to empty buffer
            try:
                while True:
                    sock.recv_string(flags=zmq.NOBLOCK)
                    data = sock.recv_pyobj(flags=zmq.NOBLOCK)
            except zmq.Again:
                pass

    return data
コード例 #3
0
ファイル: node_server.py プロジェクト: turingcompl33t/terrier
    def has_pending_messages(socket: zmq.Socket, timeout: int) -> bool:
        """
        Checks if a socket has any pending messages

        Parameters
        ----------
        socket
            Socket to check for messages
        timeout
            How long to wait for messages in milliseconds

        Returns
        -------
        has_pending_messages
            True if there are pending messages, false otherwise
        """
        return socket.poll(timeout) == zmq.POLLIN
コード例 #4
0
def _check_provider_job(socket: zmq.Socket, provider: ExecutionProvider, job_id: Any):
    """Poll for messages, checking that the provider's allocation is alive."""
    while not socket.poll(1000, zmq.POLLIN):
        if provider.status([job_id])[0].terminal:
            raise RuntimeError("Provider job has terminated")