code: def join(self, queue_name, min_successes=10, idle_time=100, *, timeout=None):
          
          deadline = timeout and time.monotonic() + timeout / 1000
          successes = 0
          while successes < min_successes:
              if deadline and time.monotonic() >= deadline:
                  raise QueueJoinTimeout(queue_name)
  
              total_messages = sum(self.get_queue_message_counts(queue_name)[:-1])
              if total_messages == 0:
                  successes += 1
              else:
                  successes = 0
  
              self.connection.sleep(idle_time / 1000)
docs: Wait for all the messages on the given queue to be
          processed.  This method is only meant to be used in tests to
          wait for all the messages in a queue to be processed.
  
          Warning:
            This method doesn't wait for unacked messages so it may not
            be completely reliable.  Use the stub broker in your unit
            tests and only use this for simple integration tests.
  
          Parameters:
            queue_name(str): The queue to wait on.
            min_successes(int): The minimum number of times all the
              polled queues should be empty.
            idle_time(int): The number of milliseconds to wait between
              counts.
            timeout(Optional[int]): The max amount of time, in
              milliseconds, to wait on this queue.