class_docstr: A class which is responsible for
  stepping the environment with epsilon-greedy,
  and fill the results to experience replay buffer.
class_docstr_tok: ["A","class","which","is","responsible","for","stepping","the","environment","with","epsilon-greedy",",","and","fill","the","results","to","experience","replay","buffer","."]
docstr: Args:
      player (gym.Env)
      predictor (callable): the model forward function which takes a
          state and returns the prediction.
      memory (ReplayMemory): the replay memory to store experience to.
      history_len (int):
code: def __init__(self, player, predictor, memory, history_len):
      """
      Args:
          player (gym.Env)
          predictor (callable): the model forward function which takes a
              state and returns the prediction.
          memory (ReplayMemory): the replay memory to store experience to.
          history_len (int):
      """
      self.player = player
      self.num_actions = player.action_space.n
      self.predictor = predictor
      self.memory = memory
      self.state_shape = memory.state_shape
      self.dtype = memory.dtype
      self.history_len = history_len
  
      self._current_episode = []
      self._current_ob = player.reset()
      self._current_game_score = StatCounter()  # store per-step reward
      self.total_scores = []  # store per-game total score
  
      self.rng = get_rng(self)
  
imports: import copy
  import itertools
  import numpy
  import threading
  from collections import namedtuple
  from six.moves import queue, range
  from tensorpack.utils.concurrency import LoopThread, ShareSessionThread
  from tensorpack.callbacks.base import Callback
  from tensorpack.dataflow import DataFlow
  from tensorpack.utils import logger, get_rng, get_tqdm
  from tensorpack.utils.stats import StatCounter
label_desc: Use image node_id 1 to create a new EnvRunner object from inherited base classes: object with example: obj = EnvRunner(player, predictor, memory, history_len)