📄 mpdstdcp.py
字号:
mpd_send_one_msg(rhsSocket,msgToSend) else: parentSocket.sendall(line) # parentSocket.sendall('FWD by %d: |%s|' % (myRank,line) ) elif readySocket == rchildSocket: line = rchildFile.readline() if not line: del socketsToSelect[rchildSocket] rchildSocket.close() numDone += 1 if numDone >= numToDo: if parentSocket: parentSocket.close() parentSocket = 0 if myRank == 0 or endBarrierLoop1Recvd: endBarrierLoop1Recvd = 0 msgToSend = {'cmd' : 'end_barrier_loop_1'} mpd_send_one_msg(rhsSocket,msgToSend) else: parentSocket.sendall(line) # parentSocket.sendall('FWD by %d: |%s|' % (myRank,line) ) elif readySocket == lhsSocket: msg = mpd_recv_one_msg(lhsSocket) if not msg: del socketsToSelect[lhsSocket] lhsSocket.close() elif msg['cmd'] == 'end_barrier_loop_1': if myRank == 0: msgToSend = { 'cmd' : 'end_barrier_loop_2' } mpd_send_one_msg(rhsSocket,msgToSend) else: if numDone >= numToDo: msgToSend = {'cmd' : 'end_barrier_loop_1'} mpd_send_one_msg(rhsSocket,msgToSend) else: endBarrierLoop1Recvd = 1 elif msg['cmd'] == 'end_barrier_loop_2': endBarrierDone = 1 if myRank != 0: mpd_send_one_msg(rhsSocket,msg) elif msg['cmd'] == 'pmi_barrier_loop_1': if myRank == 0: msgToSend = { 'cmd' : 'pmi_barrier_loop_2' } mpd_send_one_msg(rhsSocket,msgToSend) pmiMsgToSend = 'cmd=barrier_out\n' pmiSocket.sendall(pmiMsgToSend) else: pmiBarrierLoop1Recvd = 1 if pmiBarrierInRecvd: mpd_send_one_msg(rhsSocket,msg) elif msg['cmd'] == 'pmi_barrier_loop_2': pmiBarrierInRecvd = 0 pmiBarrierLoop1Recvd = 0 if myRank != 0: pmiMsgToSend = 'cmd=barrier_out\n' pmiSocket.sendall(pmiMsgToSend) mpd_send_one_msg(rhsSocket,msg) elif msg['cmd'] == 'pmi_get': if msg['from_rank'] == myRank: pmiMsgToSend = 'cmd=get_result rc=-1 msg="%s"\n' % msg['key'] pmiSocket.sendall(pmiMsgToSend) mpd_print(0000, "RMB: SENT pmimsg=:%s:" % pmiMsgToSend ) else: kvsname = msg['kvsname'] key = msg['key'] cmd = 'value = ' + kvsname + '["' + key + '"]' try: exec(cmd) gotit = 1 except Exception, errmsg: gotit = 0 if gotit: msgToSend = { 'cmd' : 'pmi_get_response', 'value' : value, 'to_rank' : msg['from_rank'] } mpd_send_one_msg(rhsSocket,msgToSend) else: mpd_send_one_msg(rhsSocket,msg) elif msg['cmd'] == 'pmi_get_response': pmiMsgToSend = 'cmd=get_result rc=0 value=%s\n' % (msg['value']) pmiSocket.sendall(pmiMsgToSend) else: mpd_print(1, 'unrecognized msg on lhs :%s:' % (msg) ) elif readySocket == rhsSocket: msg = mpd_recv_one_msg(rhsSocket) if not msg: del socketsToSelect[rhsSocket] rhsSocket.close() else: mpd_print(1, 'unexpected msg from rhs :%s:' % (msg) ) elif readySocket == pmiSocket: line = pmiFile.readline() mpd_print(0000, 'RMB: got msg from pmi :%s:' % (line) ) if not line: del socketsToSelect[pmiSocket] pmiSocket.close() else: parsedMsg = parse_pmi_msg(line) if parsedMsg['cmd'] == 'get_my_kvsname': pmiMsgToSend = 'cmd=my_kvsname kvsname=default_kvs\n' pmiSocket.sendall(pmiMsgToSend) elif parsedMsg['cmd'] == 'get_maxes': pmiMsgToSend = 'cmd=maxes kvsname_max=4096 ' + \ 'keylen_max=4096 vallen_max=4096\n' pmiSocket.sendall(pmiMsgToSend) elif parsedMsg['cmd'] == 'put': kvsname = parsedMsg['kvsname'] key = parsedMsg['key'] value = parsedMsg['value'] cmd = kvsname + '["' + key + '"] = "' + value + '"' mpd_print(0000, "RMB: cmd=:%s:" % cmd ) try: exec(cmd) mpd_print(0000, "RMB: finished cmd=:%s:" % cmd ) pmiMsgToSend = 'cmd=put_result rc=0\n' pmiSocket.sendall(pmiMsgToSend) except Exception, errmsg: pmiMsgToSend = 'cmd=put_result rc=-1 msg="%s"\n' % errmsg pmiSocket.sendall(pmiMsgToSend) elif parsedMsg['cmd'] == 'barrier_in': pmiBarrierInRecvd = 1 if myRank == 0 or pmiBarrierLoop1Recvd: msgToSend = { 'cmd' : 'pmi_barrier_loop_1' } mpd_send_one_msg(rhsSocket,msgToSend) elif parsedMsg['cmd'] == 'get': kvsname = parsedMsg['kvsname'] key = parsedMsg['key'] cmd = 'value = ' + kvsname + '["' + key + '"]' mpd_print(0000, "RMB: cmd=:%s:" % cmd ) try: exec(cmd) gotit = 1 except Exception, errmsg: gotit = 0 if gotit: pmiMsgToSend = 'cmd=get_result rc=0 value=%s\n' % (value) pmiSocket.sendall(pmiMsgToSend) mpd_print(0000, "RMB: SENT pmimsg=:%s:" % pmiMsgToSend ) else: msgToSend = { 'cmd' : 'pmi_get', 'key' : key, 'kvsname' : kvsname, 'from_rank' : myRank } mpd_send_one_msg(rhsSocket,msgToSend) else: mpd_print(0000, "RMB: unrecognized pmi msg :%s:" % line ) elif readySocket == manSocket: mpd_print(1, 'unexpected msg from manSocket') del socketsToSelect[manSocket] manSocket.close() else: mpd_print(1, 'msg on unexpected socket %s' % readySocket) mpd_print(0000, "out of loop") for openSocket in socketsToSelect: openSocket.close() if myRank == 0: mshipSocket.close() mpd_print(0000, "EXITING")def parse_pmi_msg(msg): parsed_msg = {} sm = re.findall(r'\S+',msg) for e in sm: se = e.split('=') parsed_msg[se[0]] = se[1] return parsed_msgif __name__ == '__main__': mpdstdcp() ## raise RuntimeError, 'mpdstdcp is not a stand-alone pgm'
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -