'This method is one of the most important ones in the class, since it
will consume the work units from the queue and send them to the plugins'

def run(self):

    while True:
        try:
            work_unit = self.in_queue.get(timeout=self.FLUSH_TIMEOUT)
        except Queue.Empty:
            self.flush_plugin_output()
            continue
        except EOFError:
            break
        if (work_unit == POISON_PILL):
            break
        else:
            (args, kwargs) = work_unit
            self._call_output_plugins_action(*args, **kwargs)
            self.in_queue.task_done()
        self.flush_plugin_output()
