def Call(self,_func, *params):
if self.stoping:
return None,"Process ready to stop!"
ArgsType=[]
index=0
args=[]
for arg in params:
if arg==None:
return None,"Parameter cannot be None!"
elif isinstance(arg,(str,unicode)):
ArgsType.append(public.STRING)
args.append(arg)
elif isinstance(arg,long):
ArgsType.append(public.LONG)
args.append(arg)
elif isinstance(arg,float):
ArgsType.append(public.DOUBLE)
args.append(arg)
elif isinstance(arg,bool):
ArgsType.append(public.BOOL)
args.append(arg)
elif isinstance(arg,int):
#int?????bool ??,???????????int
ArgsType.append(public.INT)
args.append(arg)
elif isinstance(arg,Bytes):
ArgsType.append(public.BYTES)
#?base64
args.append(arg.b64encode())
elif isinstance(arg,dict):
ArgsType.append(public.MAP)
args.append(arg)
else:
return None,"args[%d] [%s] Types not allowed"%(index,type(arg))
index+=1
callInfo=CallInfo(_func,args,ArgsType,timeout=5)
callback=Queue()
if self.local_client!=None:
err=self.local_client.Call(callInfo,callback)
elif self.remote_client!=None:
err=self.remote_client.Call(callInfo,callback)
else:
return None, "rpc service connection failed"
if err!=None:
return None,err
try:
resultInfo=callback.get()
return resultInfo.Result, resultInfo.Error
except Empty:
return None,"Quitting time!"
评论列表
文章目录