Python (サーバー) と Haskell (クライアント) の間のクロス言語プラットフォームとして、単純な Thrift サーバー ( http://thrift.apache.org/ ) を実行しています。送信する必要がある唯一のデータ構造は double の 3 タプルであるため、サーバー/クライアントの実装も非常に単純です。チュートリアルに従うだけで十分でした。
しかし、それは本当に、本当に遅いです!約 0.1 秒以下の時間が必要な場合、各サーバーの応答で約 0.5 秒の応答時間が得られます。
これをスピードアップする方法について誰かアイデアがありますか? 以下に、私の単純なサーバー実装を示します。
1 import sys
2
3 from vision import Vision
4 from vision.ttypes import *
5
6 from thrift.transport import TSocket
7 from thrift.transport import TTransport
8 from thrift.protocol import TBinaryProtocol
9 from thrift.protocol.TBinaryProtocol import TBinaryProtocolAccelerated
10 from thrift.server import TServer
11
12 class VisionHandler:
13 def observe(self):
14 ret = Position()
15 ret.x,ret.y,ret.z = (1,2,3)
16 return ret
17
18 ret = Position()
20 handler = VisionHandler()
21 processor = Vision.Processor(handler)
22 transport = TSocket.TServerSocket(port=9090)
23 tfactory = TTransport.TBufferedTransportFactory()
24 pfactory = TBinaryProtocol.TBinaryProtocolFactory()
25
26 server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)
27
28 print 'Starting the vision server...'
29 server.serve()
30 print 'done.'
クライアントは、実行してこのサーバーにクエリを実行するだけです
36 client = do
37 handle <- hOpen ("localhost", PortNumber 9090)
38 let binProto = BinaryProtocol handle
39 return (binProto, binProto)
その後
res <- Client.observe =<< client
私の知る限り、これはすべてかなり標準的なものです。なんでこんなに遅いの??
ありがとう!