1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import logging as Log
- import grpc,argparse,time,sys,threading
- import mllp_grpc.sim_mt_system_pb2_grpc as sim_mt_system_pb2_grpc
- import mllp_grpc.sim_mt_system_pb2 as sim_mt_system_pb2
- import mllp_grpc.sim_mt_common_pb2 as sim_mt_common_pb2
- import google.protobuf.empty_pb2 as empty_pb2
- class LazzyIterator:
- def __init__(self,i):
- self._i= i
- self._cv= threading.Condition()
- self._ready= False
- def __call__(self):
- with self._cv:
- if not self._ready:
- self._cv.wait()
- for v in self._i:
- yield v
-
- def ready(self):
- with self._cv:
- self._ready= True
- self._cv.notify()
-
- # end LazzyIterator
- def get_data(args):
- Log.info("Loading '%s'"%args.txt)
- Log.info('Sending data')
- with open(args.txt) as f:
- for l in f:
- l= l.strip().split()
- if l==[]: continue
- for w in l:
- o= sim_mt_common_pb2.TextPackage(words_novar=[w],
- words_var=[],
- eos=False)
- yield o
- o= sim_mt_common_pb2.TextPackage(words_novar=[],
- words_var=[],
- eos=True)
- yield o
- Log.info('Transmission completed')
-
- def parse_cmdline():
- p= argparse.ArgumentParser(description='Simultaneous MT GRPC client')
- p.add_argument('host',type=str,help='server host')
- p.add_argument('port',type=int,help='server port')
- p.add_argument('txt',type=str,help='txt file to translate')
- args= p.parse_args()
- return args
- def run(args):
- addr= '%s:%d'%(args.host,args.port)
- with grpc.insecure_channel(addr) as channel:
- stub= sim_mt_system_pb2_grpc.SimMTSystemStub(channel)
- info= stub.GetSystemInfo(empty_pb2.Empty())
- stub.SetEnabled(sim_mt_system_pb2.SetEnabledRequest(value=True))
- print(info)
- data= LazzyIterator(get_data(args))
- for o in stub.Translate(data()):
- if o.status.code==sim_mt_common_pb2.TranslateResponse.Status.READY:
- data.ready()
- continue
- if o.status.code!=sim_mt_common_pb2.TranslateResponse.Status.OK:
- print(o)
- else:
- for w in o.words_novar:
- sys.stdout.write(w+' ')
- if o.eos: sys.stdout.write('\n')
- sys.stdout.flush()
- print('------------------------------------------------')
-
- if __name__=='__main__':
- Log.basicConfig(level=Log.INFO)
- args= parse_cmdline()
- run(args)
|