class_docstr: Implementation of the Communicator class via torch.distributed. Use this
  communicator to communicate between different processes, potentially,
  running on different nodes.
docstr: Sends the specified object to the destination `dst`.
code: def send_obj(self, obj, dst, group=None):
      """Sends the specified object to the destination `dst`."""
      if group is None:
          group = self.main_group
  
      buf = pickle.dumps(obj)
      size = torch.tensor(len(buf), dtype=torch.int32)
      arr = torch.from_numpy(
          numpy.copy(numpy.frombuffer(buf, dtype=numpy.int8))
      )
  
      r0 = dist.isend(size, dst=dst, group=group)
      r1 = dist.isend(arr, dst=dst, group=group)
  
      r0.wait()
      r1.wait()
  
imports: import logging
  import os
  import pickle
  import random
  import string
  import numpy
  import torch
  import torch.distributed
  from crypten.common import serial
  from torch.distributed import ReduceOp
  from .communicator import _logging, Communicator
label_desc: Use image node_id 17 for calling the DistributedCommunicator obj's underlying member method code with example usage: obj.send_obj(obj, dst, group) without return types