Python套接字速度不对称

时间:2016-06-30 07:22:09

标签: python sockets bigdata

我正在编写python代码,使用TCP / IP套接字或UNIX域套接字来同步worker和master。

在这些套接字上传输的数据是双向的,不经常发送,但是很大(400MB~)。处理程序中的速度服务器 - >客户端足够快(20秒),但另一种方式是无法忍受的(40分钟!)

你是否有任何线索为什么套接字通过“接受”服务器发送速度更快,或者另一个更快接收,我甚至都不知道。

以下是客户端的连接方式:

  self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
  try:
     if use_tcp:
        self.sock.connect((host, websocket_port))
     else:
        self.sock.connect(unix_socket)
     self.wfile = self.sock.makefile('wb', 0)
     self.sock.sendall("connect")
     self.request_parameters()
  except:
     raise

并发送数据

  print("Sending %d bytes of data..." % sys.getsizeof(serialized))
  try:
     self.wfile.write("once" + serialized + "end")
     self.wfile.flush()
     print("Written and sent...")
  except Exception,e:
     print("Too large to be sent? :'(")
     print(e)

服务器是SocketServer one:

class TCPUnixServer(ss.TCPServer):
   address_family = socket.AF_UNIX

   def __init__(self, addr, handler):
      try:
         os.unlink(addr)
      except OSError:
         if os.path.exists(addr):
             raise
      ss.TCPServer.__init__(self, addr, handler)

def start_parameter_server(model, num_epochs, warmup_data=None, test_data=None):
   if use_tcp:
      server = ss.TCPServer(unix_socket, ParameterServerWebsocketHandler)
   else:
      server = TCPUnixServer(unix_socket, ParameterServerWebsocketHandler)

要读取数据,客户端和服务器都会这样做:

 while True:
     rcv = self.sock.recv(4096)
     if rcv.endswith("end"):
        parameters += rcv.rstrip("end")
        break
     parameters += rcv

0 个答案:

没有答案