<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def process_streamer(self, streamer, callback=None):
 """Start streaming a streamer. Args: streamer (DataStreamer):
 The streamer itself. callback (callable):
 An optional callable that will be called as: callable(index, success, highest_id_received_from_other_side) """


        index = streamer.index

        if index in self._in_progress_streamers:
            raise InternalError("You cannot add a streamer again until it has finished streaming.")

        queue_item = QueuedStreamer(streamer, callback)
        self._in_progress_streamers.add(index)

        self._logger.debug("Streamer %d: queued to send %d readings", index, queue_item.initial_count)
        self._queue.put_nowait(queue_item)