class_docstr: Implementation of the Communicator class via torch.distributed. Use this
  communicator to communicate between different processes, potentially,
  running on different nodes.
docstr: Receives an object from a source `src`.
code: def recv_obj(self, src, group=None):
      """Receives an object from a source `src`."""
      if group is None:
          group = self.main_group
  
      size = torch.tensor(1, dtype=torch.int32)
      dist.irecv(size, src=src, group=group).wait()
  
      data = torch.empty(size=(size,), dtype=torch.int8)
      dist.irecv(data, src=src, group=group).wait()
      buf = data.numpy().tobytes()
      return serial.restricted_loads(buf)
  
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 18 for calling the DistributedCommunicator obj's underlying member method code with example usage: obj.recv_obj(src, group) and returns: serial