class_docstr: Data manager for all plugin.
      
docstr: Add item to one plugin reservoir bucket.
  
  Use 'run', 'tag' for usage habits of VisualDL.
  
  Args:
      plugin: Key to get one reservoir bucket.
      run: Each tablet has different 'run'.
      tag: Tag will be used to generate paths of tablets.
      item: The item to add to reservoir bucket.
docstr_tok: ["Add","item","to","one","plugin","reservoir","bucket",".","Use","'run","'",",","'tag","'","for","usage","habits","of","VisualDL",".","Args",":","plugin",":","Key","to","get","one","reservoir","bucket",".","run",":","Each","tablet","has","different","'run","'",".","tag",":","Tag","will","be","used","to","generate","paths","of","tablets",".","item",":","The","item","to","add","to","reservoir","bucket","."]
code: def add_item(self, plugin, run, tag, item):
      """Add item to one plugin reservoir bucket.
  
      Use 'run', 'tag' for usage habits of VisualDL.
  
      Args:
          plugin: Key to get one reservoir bucket.
          run: Each tablet has different 'run'.
          tag: Tag will be used to generate paths of tablets.
          item: The item to add to reservoir bucket.
      """
      with self._mutex:
          if (
              "scalar" == plugin or "scalars" == plugin
          ):  # We adapt scalars data to be saved in scalar reservoir.
              self._reservoirs["scalar"].add_scalar_item(run, tag, item)
          else:
              self._reservoirs[plugin].add_item(run, tag, item)
  
imports: import collections
  import random
  import threading
label_desc: Use image node_id 4 for calling the DataManager obj's underlying member method code with example usage: obj.add_item(plugin, run, tag, item) without return types