code: def send_data(socket, data, scan_parameters={}, name='ReadoutData'):
      '''Sends the data of every read out (raw data and meta data) via ZeroMQ to a specified socket
      '''
      if not scan_parameters:
          scan_parameters = {}
      data_meta_data = dict(
          name=name,
          dtype=str(data[0].dtype),
          shape=data[0].shape,
          timestamp_start=data[1],  # float
          timestamp_stop=data[2],  # float
          readout_error=data[3],  # int
          scan_parameters=scan_parameters  # dict
      )
      try:
          socket.send_json(data_meta_data, flags=zmq.SNDMORE | zmq.NOBLOCK)
          socket.send(data[0], flags=zmq.NOBLOCK)  # PyZMQ supports sending numpy arrays without copying any data
      except zmq.Again:
          pasf send_data(socket, data, scan_parameters={}, name='ReadoutData'):
      '''Sends the data of every read out (raw data and meta data) via ZeroMQ to a specified socket
      '''
      if not scan_parameters:
          scan_parameters = {}
      data_meta_data = dict(
          name=name,
          dtype=str(data[0].dtype),
          shape=data[0].shape,
          timestamp_start=data[1],  # float
          timestamp_stop=data[2],  # float
          readout_error=data[3],  # int
          scan_parameters=scan_parameters  # dict
      )
      try:
          socket.send_json(data_meta_data, flags=zmq.SNDMORE | zmq.NOBLOCK)
          socket.send(data[0], flags=zmq.NOBLOCK)  # PyZMQ supports sending numpy arrays without copying any data
      except zmq.Again:
          pass
docs: Sends the data of every read out (raw data and meta data) via ZeroMQ to a specified socket