def make_gossip_buffer()

in main.py [0:0]


def make_gossip_buffer(args, mng, device):

    # Make local-gossip-buffer
    if args.num_learners > 1:
        # Make Topology
        topology = []
        for rank in range(args.num_learners):
            graph = Graph(rank, args.num_learners,
                          peers_per_itr=args.num_peers)
            topology.append(graph)

        # Initialize "actor_critic-shaped" parameter-buffer
        actor_critic = Policy(
            (4, 84, 84),
            base_kwargs={'recurrent': args.recurrent_policy},
            env_name=args.env_name)
        actor_critic.to(device)

        # Keep track of local iterations since learner's last sync
        sync_list = mng.list([0 for _ in range(args.num_learners)])
        # Used to ensure proc-safe access to agents' message-buffers
        buffer_locks = mng.list([mng.Lock() for _ in range(args.num_learners)])
        # Used to signal between processes that message was read
        read_events = mng.list([
            mng.list([mng.Event() for _ in range(args.num_learners)])
            for _ in range(args.num_learners)])
        # Used to signal between processes that message was written
        write_events = mng.list([
            mng.list([mng.Event() for _ in range(args.num_learners)])
            for _ in range(args.num_learners)])

        # Need to maintain a reference to all objects in main processes
        _references = [topology, actor_critic, buffer_locks,
                       read_events, write_events, sync_list]
        gossip_buffer = GossipBuffer(topology, actor_critic, buffer_locks,
                                     read_events, write_events, sync_list,
                                     sync_freq=args.sync_freq)
    else:
        _references = None
        gossip_buffer = None

    return gossip_buffer, _references