code: def join(self, timeout=None):
          
          if self._queue.empty():
              # Nothing to wait for...
              return True
          elif timeout is None:
              # Use the original join
              self._queue.join()
              return True
          else:
              # Wait for the condition
              with self._queue.all_tasks_done:
                  self._queue.all_tasks_done.wait(timeout)
                  return not bool(self._queue.unfinished_tasks)
docs: Waits for all the tasks to be executed
  
          :param timeout: Maximum time to wait (in seconds)
          :return: True if the queue has been emptied, else False