def train()

in main.py [0:0]


def train(args):
    pp.pprint(args)

    proc_manager = mp.Manager()
    barrier = proc_manager.Barrier(args.num_learners)

    # Shared-gossip-buffer on GPU-0
    device = torch.device('cuda:%s' % 0 if args.cuda else 'cpu')
    shared_gossip_buffer, _references = make_gossip_buffer(
        args, proc_manager, device)

    # Make actor-learner processes
    proc_list = []
    for rank in range(args.num_learners):

        # Uncomment these lines to use 2 GPUs
        # gpu_id = int(rank % 2)  # Even-rank agents on gpu-0, odd-rank on gpu-1
        # device = torch.device('cuda:%s' % gpu_id if args.cuda else 'cpu')
        proc = mp.Process(
            target=actor_learner,
            args=(args, rank, barrier, device, shared_gossip_buffer),
            daemon=False
        )
        proc.start()
        proc_list.append(proc)

        # # Bind agents to specific hardware-threads (generally not necessary)
        # avail = list(os.sched_getaffinity(proc.pid))  # available-hwthrds
        # cpal = math.ceil(len(avail) / args.num_learners)  # cores-per-proc
        # mask = [avail[(rank * cpal + i) % len(avail)] for i in range(cpal)]
        # print('process-mask:', mask)
        # os.sched_setaffinity(proc.pid, mask)

    for proc in proc_list:
        proc.join()