code: def remote_executer(self, idx, expdir, queue):
      self.occupied = True
      cmd = self.exe_cmd
      print("{}: {} {}".format(self.remote, cmd, expdir), file=stderr)
      result = self.run(cmd, stdin=expdir)
      # ipdb.set_trace()
      try:
          result = str(result).split("\n")
          used_time = result[-3]
          result = result[-2]
          assert result.startswith(
              "valid performance: "
          ) and used_time.startswith(
              "running time: "
          ), "Invalid return: %s, %s" % (
              used_time,
              result,
          )
          used_time = used_time[len("running time: ") :]
          used_time = float(used_time) / 60  # minutes
          result = result[len("valid performance: ") :]
          print(
              "**********************Putting queue*******************"
          )
          print(queue.qsize())
          result = float(result)
          queue.put([idx, (result, used_time)])
          print(
              "**********************Printing queue*******************"
          )
          print(queue.qsize())
          print(
              "{}th task: {} is successfully executed, result is {}, using {} min.".format(
                  idx, expdir, result, used_time
              ),
              file=stderr,
          )
      except Exception:
          queue.put([idx, expdir])
          print(
              "{}th task: {} fails, with return: %s.".format(
                  idx, expdir, result
              ),
              file=stderr,
          )
  
      # os.kill(pid,signal.SIGKILL)
  
      self.occupied = False
      self.check_on(queue)
  
imports: from subprocess import Popen, PIPE
  from threading import Thread, Lock
  from queue import Queue
  from time import sleep
  from sys import stderr
  import re
  import json
label_desc: Use image node_id 8 for calling the RemoteController obj's underlying member method code with example usage: obj.remote_executer(idx, expdir, queue) without return types