Create a new PolledTimeout if needed.

    If timeout_ms is already a PolledTimeout, just return it, otherwise create a
    new PolledTimeout with the given timeout in milliseconds.

    Args:
      timeout_ms: PolledTimeout object, or number of milliseconds to use for
        creating a new one.

    Returns:
      A PolledTimeout object that will expire in timeout_ms milliseconds, which
    may be timeout_ms itself, or a newly allocated PolledTimeout.

def from_millis(cls, timeout_ms):
    """Create a new PolledTimeout if needed.

    If timeout_ms is already a PolledTimeout, just return it, otherwise create a
    new PolledTimeout with the given timeout in milliseconds.

    Args:
      timeout_ms: PolledTimeout object, or number of milliseconds to use for
        creating a new one.

    Returns:
      A PolledTimeout object that will expire in timeout_ms milliseconds, which
    may be timeout_ms itself, or a newly allocated PolledTimeout.
    """
    if hasattr(timeout_ms, 'has_expired'):
      return timeout_ms
    if timeout_ms is None:
      return cls(None)
    return cls(timeout_ms / 1000.0)