code: def worker(self):
      while True:
          if self._shutdown:
              logger.debug(
                  f"Shutting down worker thread {threading.get_ident()}."
              )
              break
          task_f, args = self._queue.get()
          if self._try_exec_task(task_f, *args):
              arg_size = self._calculate_size(args)
              with self._queue.mutex:
                  self.current_memory_usage -= arg_size
              # clear the unnecessary references
              task_f, args = None, None
              self._queue.task_done()
          else:
              self._put_front(task_f, args)
  
file_path: aim/aim/ext/transport/rpc_queue.py
imports: import time
  import queue
  import logging
  import threading
  import weakref
label_desc: Use image node_id 3 for calling the RpcQueueWithRetry obj's underlying member method code with example usage: obj.worker() without return types