def dataReceived(self, data): reactor.callInThread(self.deserializeWorldMessage, data) def deserializeWorldMessage(self, data): world_message = messages_pb2.WorldMessage() world_message.ParseFromString(str(data[4:])) # cut first 4 bytes since they only indicate the message length self.HandleData(world_message) def HandleData(self, worldMessage): print "======= CmsgSendData ========" # some logic here self.sendWorldMessage(worldMessage.SerializeToString()) def sendWorldMessage(self, worldMessage): # cpu heavy operation like compression # dont forget to add the size of the message as !I prefix reactor.callFromThread(self.sendData, worldMessage) def sendData(self, data): self.transport.write(data)