⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mpdlib.py

📁 mpi并行计算的c++代码 可用vc或gcc编译通过 可以用来搭建并行计算试验环境
💻 PY
📖 第 1 页 / 共 4 页
字号:
#!/usr/bin/env python##   (C) 2001 by Argonne National Laboratory.#       See COPYRIGHT in top-level directory.#import sys, os, signal, popen2, socket, select, inspectfrom  cPickle   import  dumps, loadsfrom  types     import  TupleTypefrom  traceback import  extract_tb, extract_stack, format_listfrom  re        import  sub, splitfrom  errno     import  EINTR, ECONNRESETfrom  md5       import  new as md5newfrom  time      import  sleepfrom  random    import  randrange, randomtry:    import pwd    pwd_module_available = 1except:    pwd_module_available = 0try:    import grp    grp_module_available = 1except:    grp_module_available = 0try:    import  syslog    syslog_module_available = 1except:    syslog_module_available = 0try:    import subprocess    subprocess_module_available = 1except:    subprocess_module_available = 0# some global vars for some utilitiesglobal mpd_my_id, mpd_signum, mpd_my_hostname, mpd_procedures_to_traceglobal mpd_cli_app  # for debug during mpich nightly testsmpd_cli_app = ''mpd_my_id = ''mpd_procedures_to_trace = []mpd_my_hostname = ''mpd_signum = 0# mpd_signum can be set by mpd_handle_signal to indicate which signal was recently caught;# this can be useful below to pop out of loops that ordinarily continue after sigs# NOTE: mpd_handle_signal must be called by the user, e.g. in his own signal handlerdef mpd_set_my_id(myid=''):    global mpd_my_id    mpd_my_id = myiddef mpd_get_my_id():    global mpd_my_id    return(mpd_my_id)def mpd_set_cli_app(app):    # for debug during mpich nightly tests    global mpd_cli_app    mpd_cli_app = appdef mpd_handle_signal(signum,frame):    global mpd_signum    mpd_signum = signumdef mpd_print(*args):    global mpd_my_id    if not args[0]:        return    stack = extract_stack()    callingProc = stack[-2][2]    callingLine = stack[-2][1]    printLine = '%s (%s %d): ' % (mpd_my_id,callingProc,callingLine)    for arg in args[1:]:        printLine = printLine + str(arg)    print printLine    sys.stdout.flush()    if syslog_module_available:        syslog.syslog(syslog.LOG_INFO,printLine)def mpd_print_tb(*args):    global mpd_my_id    if not args[0]:        return    stack = extract_stack()    callingProc = stack[-2][2]    callingLine = stack[-2][1]    stack = extract_stack()    stack.reverse()    stack = stack[1:]    printLine = '%s (%s %d):' % (mpd_my_id,callingProc,callingLine)    for arg in args[1:]:        printLine = printLine + str(arg)    printLine += '\n  mpdtb:\n'    for line in format_list(stack):        line = sub(r'\n.*','',line)        splitLine = split(',',line)        splitLine[0] = sub('  File "(.*)"',lambda mo: mo.group(1),splitLine[0])        splitLine[1] = sub(' line ','',splitLine[1])        splitLine[2] = sub(' in ','',splitLine[2])        printLine = printLine + '    %s,  %s,  %s\n' % tuple(splitLine)    if mpd_cli_app:    # debug mpich apps in nightly tests        printLine += '    mpd_cli_app=%s' % (mpd_cli_app)    print printLine    sys.stdout.flush()    if syslog_module_available:        syslog.syslog(syslog.LOG_INFO,printLine)def mpd_uncaught_except_tb(arg1,arg2,arg3):    global mpd_my_id    global mpd_cli_id    if mpd_my_id:        errstr = '%s: ' % (mpd_my_id)    else:        errstr = ''    errstr += 'mpd_uncaught_except_tb handling:\n'    errstr += '  %s: %s\n' % (arg1,arg2)    tb = extract_tb(arg3)    tb.reverse()    for tup in tb:        # errstr += '    file %s  line# %i  procedure %s\n        %s\n' % (tup)        errstr += '    %s  %i  %s\n        %s\n' % (tup)    if mpd_cli_app:    # debug mpich apps in nightly tests        errstr += '    mpd_cli_app=%s' % (mpd_cli_app)    print errstr,    if syslog_module_available:        syslog.syslog(syslog.LOG_ERR, errstr)def mpd_set_procedures_to_trace(procs):    global mpd_procedures_to_trace    mpd_procedures_to_trace = procsdef mpd_trace_calls(frame,event,args):    global mpd_my_id, mpd_procedures_to_trace    if frame.f_code.co_name not in mpd_procedures_to_trace:        return None    args_info = apply(inspect.formatargvalues,inspect.getargvalues(frame))    print '%s: ENTER %s in %s at line %d; ARGS=%s' % \          (mpd_my_id,frame.f_code.co_name,frame.f_code.co_filename,frame.f_lineno,args_info)    return mpd_trace_returnsdef mpd_trace_returns(frame,event,args):    global mpd_my_id    if event == 'return':        print '%s: EXIT %s at line %d ' % (mpd_my_id,frame.f_code.co_name,frame.f_lineno)        return None    else:        return mpd_trace_returnsdef mpd_sockpair():    sock1 = MPDSock()    rc = sock1.sock.bind(('',0))    rc = sock1.sock.listen(5)    port1 = sock1.sock.getsockname()[1]    sock2 = MPDSock()    try:        rc = sock2.sock.connect(('localhost',port1))    except:        # we have seen at least one machine that needs it this way        rc = sock2.sock.connect(('',port1))    (sock3,addr) = sock1.sock.accept()    sock3 = MPDSock(sock=sock3)    sock1.close()    return (sock2,sock3)def mpd_which(execName):    for d in os.environ['PATH'].split(os.pathsep):        fpn = os.path.join(d,execName)        if os.path.isdir(fpn):  # follows symlinks; dirs can have execute permission            continue        if os.access(fpn,os.X_OK):    # NOTE access works based on real uid (not euid)            return fpn    return ''def mpd_check_python_version():    # version_info: (major,minor,micro,releaselevel,serial)    if (sys.version_info[0] < 2)  or  \       (sys.version_info[0] == 2 and sys.version_info[1] < 2):        return sys.version_info    return 0def mpd_version():    return (1,0,0,'May, 2005 release')  # major, minor, micro, specialdef mpd_get_my_username():    if pwd_module_available:        username = pwd.getpwuid(os.getuid())[0]    # favor this over env    elif os.environ.has_key('USER'):        username = environ['USER']    elif os.environ.has_key('USERNAME'):        username = os.environ['USERNAME']    else:        username = 'unknown_username'    return usernamedef mpd_get_ranks_in_binary_tree(myRank,nprocs):    if myRank == 0:        parent = -1;    else:           parent = (myRank - 1) / 2;     lchild = (myRank * 2) + 1    if lchild > (nprocs - 1):        lchild = -1;    rchild = (myRank * 2) + 2    if rchild > (nprocs - 1):        rchild = -1;    return (parent,lchild,rchild)def mpd_same_ips(host1,host2):    # hosts may be names or IPs    try:        ips1 = socket.gethostbyname_ex(host1)[2]    # may fail if invalid host        ips2 = socket.gethostbyname_ex(host2)[2]    # may fail if invalid host    except:        return 0    for ip1 in ips1:        for ip2 in ips2:            if ip1 == ip2:                return 1    return 0def mpd_read_nbytes(fd,nbytes):    global mpd_signum    rv = 0    while 1:        try:            rv = os.read(fd,nbytes)            break        except os.error, errinfo:            if errinfo[0] == EINTR:                if mpd_signum == signal.SIGINT  or  mpd_signum == signal.SIGALRM:                    break                else:                    continue            elif errinfo[0] == ECONNRESET:   # connection reset (treat as eof)                break            else:                mpd_print(1, 'read error: %s' % os.strerror(errinfo[0]))                break        except KeyboardInterrupt, errinfo:            break        except Exception, errinfo:            mpd_print(1, 'other error after read %s :%s:' % ( errinfo.__class__, errinfo) )            break    return rvdef mpd_get_groups_for_username(username):    if pwd_module_available  and  grp_module_available:        userGroups = [pwd.getpwnam(username)[3]]  # default group for the user        allGroups = grp.getgrall();        for group in allGroups:            if username in group[3]  and  group[2] not in userGroups:                userGroups.append(group[2])    else:        userGroups = []    return userGroupsclass MPDSock(object):    def __init__(self,family=socket.AF_INET,socktype=socket.SOCK_STREAM,proto=0,                 sock=None,name=''):        if sock:            self.sock = sock        else:            self.sock = socket.socket(family=family,type=socktype,proto=proto)        self.name = name        self.type = socktype        self.family = family        ## used this when inherited from socket.socket (only works with py 2.3+)        ## socket.socket.__init__(self,family=family,type=socktype,proto=proto,_sock=sock)    def close(self):        self.sock.close()    def sendall(self,data):        self.sock.sendall(data)    def getsockname(self):        return self.sock.getsockname()    def fileno(self):        return self.sock.fileno()    def connect(self,*args):        self.sock.connect(*args)    def accept(self,name='accepter'):        global mpd_signum        newsock = 0        newaddr = 0        while 1:            try:                mpd_signum = 0                (newsock,newaddr) = self.sock.accept()                break            except socket.error, errinfo:                if errinfo[0] == EINTR:   # sigchld, sigint, etc.                    if mpd_signum == signal.SIGINT  or  mpd_signum == signal.SIGALRM:                        break                    else:                        continue                elif errinfo[0] == ECONNRESET:   # connection reset (treat as eof)                    break                else:                    print '%s: accept error: %s' % (mpd_my_id,os.strerror(errinfo[0]))                    break

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -