Starts measuring time, and prints the bar at 0%.

        It returns self so you can use it like this:

        Args:
            max_value (int): The maximum value of the progressbar
            reinit (bool): Initialize the progressbar, this is useful if you
                wish to reuse the same progressbar but can be disabled if
                data needs to be passed along to the next run

        >>> pbar = ProgressBar().start()
        >>> for i in range(100):
        ...    # do something
        ...    pbar.update(i+1)
        ...
        >>> pbar.finish()

def start(self, max_value=None, init=True):
        '''Starts measuring time, and prints the bar at 0%.

        It returns self so you can use it like this:

        Args:
            max_value (int): The maximum value of the progressbar
            reinit (bool): Initialize the progressbar, this is useful if you
                wish to reuse the same progressbar but can be disabled if
                data needs to be passed along to the next run

        >>> pbar = ProgressBar().start()
        >>> for i in range(100):
        ...    # do something
        ...    pbar.update(i+1)
        ...
        >>> pbar.finish()
        '''
        if init:
            self.init()

        # Prevent multiple starts
        if self.start_time is not None:  # pragma: no cover
            return self

        if max_value is not None:
            self.max_value = max_value

        if self.max_value is None:
            self.max_value = self._DEFAULT_MAXVAL

        StdRedirectMixin.start(self, max_value=max_value)
        ResizableMixin.start(self, max_value=max_value)
        ProgressBarBase.start(self, max_value=max_value)

        # Constructing the default widgets is only done when we know max_value
        if self.widgets is None:
            self.widgets = self.default_widgets()

        if self.prefix:
            self.widgets.insert(0, widgets.FormatLabel(
                self.prefix, new_style=True))

        if self.suffix:
            self.widgets.append(widgets.FormatLabel(
                self.suffix, new_style=True))

        for widget in self.widgets:
            interval = getattr(widget, 'INTERVAL', None)
            if interval is not None:
                self.poll_interval = min(
                    self.poll_interval or interval,
                    interval,
                )

        self.num_intervals = max(100, self.term_width)

        if self.max_value is not base.UnknownLength and self.max_value < 0:
            raise ValueError('Value out of range')

        self.start_time = self.last_update_time = datetime.now()
        self._last_update_timer = timeit.default_timer()
        self.update(self.min_value, force=True)

        return self