code: def populate(self, installed_bots=None):
          
          if self.ready:
              return
  
          # populate() might be called by two threads in parallel on servers
          # that create threads before initializing the WSGI callable.
          with self._lock:
              if self.ready:
                  return
  
              # An RLock prevents other threads from entering this section. The
              # compare and set operation below is atomic.
              if self.loading:
                  # Prevent re-entrant calls to avoid running AppConfig.ready()
                  # methods twice.
                  raise RuntimeError("populate() isn't re-entrant")
              self.loading = True
  
              # Phase 1: Initialize bots
              for entry in installed_bots or {}:
                  if isinstance(entry, Bot):
                      cls = entry
                      entry = '.'.join([cls.__module__, cls.__name__])
                  bot_reg = BotRegistry.create(entry)
                  if bot_reg.label in self.bots:
                      raise ImproperlyConfigured(
                          "Bot labels aren't unique, "
                          "duplicates: %s" % bot_reg.label)
  
                  self.bots[bot_reg.label] = bot_reg
                  bot_reg.bots = self
  
              # Check for duplicate bot names.
              counts = Counter(
                  bot_reg.name for bot_reg in self.bots.values())
              duplicates = [
                  name for name, count in counts.most_common() if count > 1]
              if duplicates:
                  raise ImproperlyConfigured(
                      "Bot names aren't unique, "
                      "duplicates: %s" % ", ".join(duplicates))
  
              self.bots_ready = True
  
              # Phase 2: import config files
              for bot in self.bots.values():
                  bot.import_configs()
  
              self.configs_ready = True
  
              self.ready = True
docs: Load bots.
          Import each bot module.
          It is thread-safe and idempotent, but not re-entrant.