docstr: This method returns the number of milliseconds from start.
  It returns a float, with microsecond granularity.
  
  Since on Windows, datetime.now() has actually a millisecond granularity,
  we remember the last returned value and in case of a collision, we add a microsecond.
code: def next(self):
      """
      This method returns the number of milliseconds from start.
      It returns a float, with microsecond granularity.
  
      Since on Windows, datetime.now() has actually a millisecond granularity,
      we remember the last returned value and in case of a collision, we add a microsecond.
      """
      millis_from_start = (
          datetime.now(tz=self._start.tzinfo) - self._start
      ).total_seconds() * 1000
      if (
          self._previous_millis_from_start is not None
          and self._previous_millis_from_start >= millis_from_start
      ):
          microsecond = 0.001
          self._previous_millis_from_start = (
              self._previous_millis_from_start + microsecond
          )
      else:
          self._previous_millis_from_start = millis_from_start
  
      return self._previous_millis_from_start
  
file_path: neptune-client/src/neptune/legacy/internal/streams/channel_writer.py
imports: from __future__ import unicode_literals
  import re
  from datetime import datetime
  from neptune.legacy.internal.channels.channels import ChannelNamespace, ChannelType, ChannelValue
label_desc: Use image node_id 2 for calling the TimeOffsetGenerator obj's underlying member method code with example usage: obj.next() and returns: self