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