"""
Specializes the ThreadInterface to try to read from a provided queue every tick
and `process` the message in some way.
"""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import collections
import time

from . import common


class Processor(common.ThreadInterface):
    def __init__(self, queue):
        assert isinstance(queue, collections.deque)
        super(Processor, self).__init__()
        self._queue = queue

    def _run_impl(self):
        if not self._queue:
            # We need to release the GIL if the queue is empty
            # Max msg frequency is ~ 200 Hz, with a period of 50 ms
            # 5 ms sleep time should be safe
            time.sleep(0.0005)
            return
        self.process(self._queue.popleft())

    def process(self, msg):
        raise NotImplementedError
