<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def start(self):
 """ Starts the OplogWatcher. """

        oplog = self.connection.local['oplog.rs']

        if self.ts is None:
            cursor = oplog.find().sort('$natural', -1)
            obj = cursor[0]
            if obj:
                self.ts = obj['ts']
            else:
                # In case no oplogs are present.
                self.ts = None

        if self.ts:
            logging.info('Watching oplogs with timestamp > %s' % self.ts)
        else:
            logging.info('Watching all oplogs')

        while self.running:
            query = { 'ts': {'$gt': self.ts} }

            try:
                logging.debug('Tailing over %r...' % query)
                cursor = oplog.find(query, tailable=True)
                # OplogReplay flag greatly improves scanning for ts performance.
                cursor.add_option(pymongo.cursor._QUERY_OPTIONS['oplog_replay'])

                while self.running:
                    for op in cursor:
                        self.process_op(op['ns'], op)
                    time.sleep(self.poll_time)
                    if not cursor.alive:
                        break
            except AutoReconnect, e:
                logging.warning(e)
                time.sleep(self.poll_time)
            except OperationFailure, e:
                logging.exception(e)
                time.sleep(self.poll_time)