Connection handler thread. Takes care of communication with the client 
        and running the proper task or applying a signal.

def _handler(self, conn):
        """
        Connection handler thread. Takes care of communication with the client 
        and running the proper task or applying a signal.
        """
        incoming = self.recv(conn)
        self.log(DEBUG, incoming)
        try:
            # E.g. ['twister', [7, 'invert'], {'guess_type': True}]
            task, args, kw = self.codec.decode(incoming)
            
            # OK, so we've received the information. Now to use it.
            self.log(INFO, 'Fulfilling task %r' % task)
            self.started_task()
            
            pass_backend = False
            obj = self.tasks[task]
            if _is_iter(obj):
                # (callable, bool)
                obj, pass_backend = obj
            if pass_backend:
                # Have to do this, since args is a list
                args = [self] + args
            
            # Get and package the result
            res = ['success', obj(*args, **kw)]
        except Exception as e:
            self.log(ERROR, 'Error while fullfilling task %r: %r' % (task, e))
            res = ['error', e.__class__.__name__, e.args]
            if self.tracebacks:
                show_err()
        else:
            self.log(INFO, 'Finished fulfilling task %r' % task)
        finally:
            self.send(conn, self.codec.encode(res))
            self.finished_task()
            conn.close()