pause the current coroutine until this event is set

        .. note::

            this method will block the current coroutine if :meth:`set` has not
            been called.

        :param timeout:
            the maximum amount of time to block in seconds. the default of
            ``None`` allows indefinite blocking.
        :type timeout: number or None

        :returns:
            ``True`` if a timeout was provided and was hit, otherwise ``False``

def wait(self, timeout=None):
        """pause the current coroutine until this event is set

        .. note::

            this method will block the current coroutine if :meth:`set` has not
            been called.

        :param timeout:
            the maximum amount of time to block in seconds. the default of
            ``None`` allows indefinite blocking.
        :type timeout: number or None

        :returns:
            ``True`` if a timeout was provided and was hit, otherwise ``False``
        """
        if self._is_set:
            return False

        current = compat.getcurrent()  # the waiting greenlet

        waketime = None if timeout is None else time.time() + timeout
        if timeout is not None:
            scheduler.schedule_at(waketime, current)

        self._waiters.append(current)
        scheduler.state.mainloop.switch()

        if timeout is not None:
            if not scheduler._remove_timer(waketime, current):
                scheduler.state.awoken_from_events.discard(current)
                if current in self._waiters:
                    self._waiters.remove(current)
                return True

        return False