1from mpi4py import MPI 2import sys, os, optparse 3 4assert __name__ == '__main__' 5from os.path import split, splitext, dirname, realpath 6dirname = dirname(__file__) 7assert sys.path[0] == realpath(dirname) 8if split(__file__)[1] == '__main__.py': 9 if splitext(dirname)[0] == '.zip': 10 assert sys.argv[0] == dirname 11 else: 12 assert realpath(sys.argv[0]) == realpath(dirname) 13else: 14 assert sys.argv[0] == __file__ 15 16parser = optparse.OptionParser() 17parser.add_option("--rank", action='store', 18 type='int', dest="rank", default=0) 19parser.add_option("--sys-exit", action='store', 20 type='int', dest="sys_exit", default=None) 21parser.add_option("--sys-exit-msg", action="store", 22 type="string", dest="sys_exit", default=None) 23parser.add_option("--exception", action="store", 24 type="string", dest="exception", default=None) 25(options, args) = parser.parse_args() 26assert not args 27 28comm = MPI.COMM_WORLD 29if comm.rank == options.rank: 30 if options.sys_exit: 31 sys.exit(options.sys_exit) 32 if options.exception: 33 raise RuntimeError(options.exception) 34 35comm.Barrier() 36if comm.rank > 0: 37 comm.Recv([None, 'B'], comm.rank - 1) 38print("Hello, World!") 39if comm.rank < comm.size - 1: 40 comm.Send([None, 'B'], comm.rank + 1) 41comm.Barrier() 42 43sys.exit() 44