code: def get_experts(
      dht: DHT,
      uids: List[ExpertUID],
      expiration_time: Optional[DHTExpiration] = None,
      return_future: bool = False,
  ) -> Union[
      List[Optional[RemoteExpert]],
      MPFuture[List[Optional[RemoteExpert]]],
  ]:
      """
      :param uids: find experts with these ids from across the DHT
      :param expiration_time: if specified, return experts that expire no sooner than this (based on get_dht_time)
      :param return_future: if False (default), return when finished. Otherwise return MPFuture and run in background.
      :returns: a list of [RemoteExpert if found else None]
      """
      assert not isinstance(
          uids, str
      ), "Please send a list / tuple of expert uids."
      result = dht.run_coroutine(
          partial(
              _get_experts,
              uids=list(uids),
              expiration_time=expiration_time,
          ),
          return_future,
      )
      return create_remote_experts(result, dht, return_future)
  
file_path: hivemind/hivemind/moe/server/dht_handler.py
imports: import threading
  from functools import partial
  from typing import Dict, List, Optional, Sequence, Tuple, Union
  from hivemind.dht import DHT, DHTNode, DHTValue
  from hivemind.moe.client.expert import RemoteExpert, create_remote_experts
  from hivemind.moe.expert_uid import FLAT_EXPERT, UID_DELIMITER, UID_PATTERN, Coordinate, ExpertInfo, ExpertPrefix, ExpertUID, is_valid_uid, split_uid
  from hivemind.p2p import PeerID
  from hivemind.utils import MAX_DHT_TIME_DISCREPANCY_SECONDS, DHTExpiration, MPFuture, get_dht_time
label_desc: Use image node_id 2 for calling a global function with example usage: get_experts(dht, uids, expiration_time, return_future) and returns: create_remote_experts