code: def _next_method(self):
          
          queue = self.queue
          put = self._quick_put
          read_frame = self.source.read_frame
          while not queue:
              try:
                  frame_type, channel, payload = read_frame()
              except Exception as exc:
                  #
                  # Connection was closed?  Framing Error?
                  #
                  put(exc)
                  break
  
              self.bytes_recv += 1
  
              if frame_type not in (self.expected_types[channel], 8):
                  put((
                      channel,
                      UnexpectedFrame(
                          'Received frame {0} while expecting type: {1}'.format(
                              frame_type, self.expected_types[channel]))))
              elif frame_type == 1:
                  self._process_method_frame(channel, payload)
              elif frame_type == 2:
                  self._process_content_header(channel, payload)
              elif frame_type == 3:
                  self._process_content_body(channel, payload)
              elif frame_type == 8:
                  self._process_heartbeat(channel, payload)
docs: Read the next method from the source, once one complete method has
          been assembled it is placed in the internal queue.