class_docstr: Read a LMDB database and produce (k,v) raw bytes pairs.
  The raw bytes are usually not what you're interested in.
  You might want to use
  :class:`LMDBDataDecoder` or apply a
  mapper function after :class:`LMDBData`.
class_docstr_tok: ["Read","a","LMDB","database","and","produce","(","k",",","v",")","raw","bytes","pairs",".","The","raw","bytes","are","usually","not","what","you","'re","interested","in",".","You","might","want","to","use",":","class",":","`","LMDBDataDecoder","`","or","apply","a","mapper","function","after",":","class",":","`","LMDBData","`","."]
code: def __iter__(self):
      with self._guard:
          if not self._shuffle:
              c = self._txn.cursor()
              for k, v in c:
                  if k != b"__keys__":
                      yield [k, v]
          else:
              self.rng.shuffle(self.keys)
              for k in self.keys:
                  v = self._txn.get(k)
                  yield [k, v]
  
imports: import numpy
  import os
  import six
  from ..utils import logger
  from ..utils.argtools import log_once
  from ..utils.serialize import loads
  from ..utils.develop import create_dummy_class
  from ..utils.loadcaffe import get_caffe_pb
  from ..utils.timer import timed_operation
  from ..utils.utils import get_tqdm
  from .base import DataFlowReentrantGuard, RNGDataFlow
  from .common import MapData
label_desc: Use image node_id 7 for calling the LMDBData obj's underlying member method code with example usage: obj.__iter__() without return types