class_docstr: A wrapper for Qstat to avoid overloading the
  SGE/OGS server with rapid continuous qstat requests
class_docstr_tok: ["A","wrapper","for","Qstat","to","avoid","overloading","the","SGE\/OGS","server","with","rapid","continuous","qstat","requests"]
docstr: :param qstat_instant_executable:
  :param qstat_cached_executable:
docstr_tok: [":","param","qstat_instant_executable",":",":","param","qstat_cached_executable",":"]
code: def __init__(
      self,
      qstat_instant_executable="qstat",
      qstat_cached_executable="qstat",
  ):
      """
      :param qstat_instant_executable:
      :param qstat_cached_executable:
      """
      self._qstat_instant_executable = qstat_instant_executable
      self._qstat_cached_executable = qstat_cached_executable
      self._out_of_scope_jobs = list()  # Initialize first
      self._task_dictionary = (
          dict()
      )  # {'taskid': QJobInfo(), .... }  The dictionaryObject
      self._remove_old_jobs()
  
imports: import os
  import pwd
  import re
  import subprocess
  import time
  import xml.dom.minidom
  import random
  from ...None import logging
  from ...interfaces.base import CommandLine
  from .base import SGELikeBatchManagerBase, logger
label_desc: Use image node_id 1 to create a new QstatSubstitute object  with example: obj = QstatSubstitute(qstat_instant_executable, qstat_cached_executable)