def process_single_message_from_queue(self):
        """
        Tries to read a single message from the queue and let the associated task process it.
        :return: bool: True if we processed a message, otherwise False
        """
        try:
            message = self.message_queue.get_nowait()
            task_id, data = message
            task = self.task_id_to_task[task_id]
            task.on_message(data)
            return True
        except queue.Empty:
            return False