<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def read_message(self):
 """Try to read a message from the buffered data. A message is defined as a 32-bit integer size, followed that number of bytes. First we try to non-destructively read the integer. Then, we try to non- destructively read the remaining bytes. If both are successful, we then go back to remove the span from the front of the buffers. """


        with self.__class__.__locker:
            result = self.__passive_read(4)
            if result is None:
                return None

            (four_bytes, last_buffer_index, updates1) = result
            (length,) = unpack('>I', four_bytes)

            result = self.__passive_read(length, last_buffer_index)
            if result is None:
                return None

            (data, last_buffer_index, updates2) = result

            # If we get here, we found a message. Remove it from the buffers.

            for updates in (updates1, updates2):
                for update in updates:
                    (buffer_index, buffer_, length_consumed) = update
                    self.__buffers[buffer_index] = buffer_ if buffer_ else ''
                    self.__length -= length_consumed

            self.__read_buffer_index = last_buffer_index
            self.__hits += 1
        
            if self.__hits >= self.__class__.__cleanup_interval:
                self.__cleanup()
                self.__hits = 0

        return data