Hello Omkar,
Thank you for replying. The weird issue is that I don’t see the terminated print statement when I use join=True. With the issue that you linked to me, when I spawn the process, shouldn’t I be seeing the print statements from my main_worker function before I hit the terminated print statement? I apologize if this question isn’t framed right. I am new to distributed and don’t understand the system that well.
 ctx = mp.spawn(main_worker, nprocs=ngpus_per_node,
                 args=(ngpus_per_node, args), join=False)
        time.sleep(3)
        print('terminated')
        ctx.join()
    else:
        # Simply call main_worker function
        main_worker(args.gpu, ngpus_per_node, args)


def main_worker(gpu, ngpus_per_node, args):
    global best_acc1
    print(gpu)
    args.gpu = gpu

diff --git a/repro_org.py b/repro.py
index be44c3d..e971db4 100644
--- a/repro_org.py
+++ b/repro.py
@@ -6,7 +6,8 @@ def worker(nproc, arg1, arg2, arg3):
     test = True
 
 if __name__ == '__main__':
-    mp.spawn(worker, (None, None, None), nprocs=1, join=False)
+    ctx = mp.spawn(worker, (None, None, None), nprocs=1, join=False)
     time.sleep(3)
     print('terminated')
+    ctx.join()