class_docstr: Client for ParameterServer.
  Supports store, accumulate, swap, swap-accumulate, and get operations.
class_docstr_tok: ["Client","for","ParameterServer",".","Supports","store",",","accumulate",",","swap",",","swap-accumulate",",","and","get","operations","."]
docstr: All clients should call join at the end, which will allow the server
  to exit.
  If barrier is True, *caller* must actually execute the barrier on
  self.groups[0].
code: def join(self, do_barrier: bool = False) -> None:
      """All clients should call join at the end, which will allow the server
      to exit.
      If barrier is True, *caller* must actually execute the barrier on
      self.groups[0].
      """
      cmd_rpc = torch.tensor(
          [JOIN_CMD, do_barrier and 1 or 0, 0, 0, 0, 0],
          dtype=torch.long,
      )
      logger.info("ParameterClient join start")
      td.send(cmd_rpc, self.server_rank, group=self._metadata_pg())
      ack = torch.empty((1,))
      td.recv(ack, src=self.server_rank)
      logger.info("ParameterClient join end")
  
imports: import logging
  import multiprocessing
  import queue
  import time
  import traceback
  from functools import lru_cache
  from typing import Callable, Dict, List, Optional, Sequence
  import torch
  import torch.distributed
  import torch.multiprocessing
  from torchbiggraph.distributed import init_process_group, Startable
  from torchbiggraph.types import CharTensorType, Rank
  from torchbiggraph.util import allocate_shared_tensor, split_almost_equally, tag_logs_with_process_name
label_desc: Use image node_id 10 for calling the ParameterClient obj's underlying member method code with example usage: obj.join(do_barrier) without return types