def _step(self, action):
        '''
            Step function interact with underlying environment. Adds this state
            to maintained queue. If stide and length criteria is met, experiences
            are sent to distributed buffer
            Args: 
                action: numpy array of shape (1 x action_dim) that denotes
                        action generated by actor
        '''
        action_choice, action_info = action
        obs_next, reward, done, info = self.env.step(action_choice)
        self.last_n.append([self._ob, action_choice, reward, done, action_info[0], action_info[1], info])

        if len(self.last_n) == self.n_step:
            self.send(self.last_n, obs_next)
            for i in range(self.stride):
                if len(self.last_n) > 0:
                    self.last_n.popleft()
        self._ob = copy.deepcopy(obs_next)
        return obs_next, reward, done, info

            Step function interact with underlying environment. Adds this state
            to maintained queue. If stide and length criteria is met, experiences
            are sent to distributed buffer
            Args: 
                action: numpy array of shape (1 x action_dim) that denotes
                        action generated by actor
        
surreal/env/exp_sender_wrapper.py