def _run(self):
logger.debug("<STR_LIT>".format(self.name))<EOL>while True:<EOL><INDENT>try:<EOL><INDENT>self.run()<EOL><DEDENT>except Exception: <EOL><INDENT>self.exc_info = sys.exc_info()<EOL>logger.debug("<STR_LIT>"<EOL>.format(self.name), exc_info = self.exc_info)<EOL>if self.exc_queue:<EOL><INDENT>self.exc_queue.put( (self, self.exc_info) )<EOL>continue<EOL><DEDENT>else:<EOL><INDENT>logger.debug("<STR_LIT>".format(self.name))<EOL>return<EOL><DEDENT><DEDENT>except:<EOL><INDENT>logger.debug("<STR_LIT>".format(self.name))<EOL>return<EOL><DEDENT>break<EOL><DEDENT>logger.debug("<STR_LIT>".format(self.name))<EOL>
The thread function. Calls `self.run()` and if it raises
        an exception, stores it in self.exc_info