def _do_paxos(self): """Do Paxos algorithm for this Node.""" #Begin running the Acceptor and Proposer in the background thread.start_new_thread(self._proposer.start, ()) thread.start_new_thread(self._acceptor.start, ()) thread.start_new_thread(_learner, (self, )) thread.start_new_thread(_shut_down, (self, )) IP, UDP_PORT = '0.0.0.0', self._ip_table[self._node_id][2] sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind((IP, UDP_PORT)) while True: data, addr = sock.recvfrom(4096) # buffer size is 1024 bytes if data == "terminate": sock.close() break #Quick lookup of ID of sender from IP received sender_ID = filter(lambda row: row[1][0] == addr[0], self._ip_table.items())[0][0] message = pickle.loads(data) #bind sender_ID to message message = message + (sender_ID, ) #construct deserailized version of message new_message = [] for field in message: if type(field) == str: try: deserialized_calendar = Calendar.deserialize(field) new_message.append(deserialized_calendar) except: new_message.append(field) else: new_message.append(field) new_message = tuple(new_message) _parse_message(new_message)