11# encoding: UTF-8
2- ##
3- # @file rpc.py
4- # @brief
5- # @author wondereamer
6- # @version 0.5
7- # @date 2016-05-17
82
93import six
104import time
@@ -20,7 +14,7 @@ def __init__(self, name, event_engine, service, event_client=None, event_server=
2014 self .EVENT_FROM_CLIENT = event_client if event_client else "EVENT_FROM_%s_CLIENT" % service .upper ()
2115 self .EVENT_FROM_SERVER = event_server if event_server else "EVENT_FROM_%s_SERVER" % service .upper ()
2216 self .rid = 0
23- self ._handlers = { }
17+ self ._handlers = {}
2418 self ._name = name
2519 self ._handlers_lock = Lock ()
2620 self ._event_engine = event_engine
@@ -31,19 +25,19 @@ def __init__(self, name, event_engine, service, event_client=None, event_server=
3125 self ._timer_sleep = 1
3226 self ._sync_call_time_lock = Lock ()
3327 self ._sync_call_time = datetime .now ()
34- timer = Thread (target = self ._run_timer )
28+ timer = Thread (target = self ._run_timer )
3529 timer .daemon = True
3630 timer .start ()
3731
3832 def _run_timer (self ):
39- ## @TODO 用python自带的Event替代。
33+ # @TODO 用python自带的Event替代。
4034 while True :
4135 if not self ._timeout == 0 :
4236 with self ._sync_call_time_lock :
4337 mtime = self ._sync_call_time
44- delta = (datetime .now ()- mtime ).seconds
38+ delta = (datetime .now () - mtime ).seconds
4539 if delta >= self ._timeout :
46- #six.print_ ("timeout", self._timeout, delta)
40+ # print ("timeout", self._timeout, delta)
4741 # 不可重入,保证self.rid就是超时的那个
4842 with self ._handlers_lock :
4943 del self ._handlers [self .rid ]
@@ -79,15 +73,15 @@ def _process_apiback(self, event):
7973 def call (self , apiname , args , handler ):
8074 """ 给定参数args,异步调用RPCServer的apiname服务,
8175 返回结果做为回调函数handler的参数。
82-
76+
8377 Args:
8478 apiname (str): 服务API名称。
8579 args (dict): 给服务API的参数。
8680 handler (function): 回调函数。
8781 """
8882 if not isinstance (args , dict ):
8983 raise InvalidRPCClientArguments (argtype = type (args ))
90- assert (not handler == None )
84+ assert (handler is not None )
9185 log .debug ('RPCClient [%s] sync_call: %s' % (self ._name , apiname ))
9286 self .rid += 1
9387 args ['apiname' ] = apiname
@@ -96,10 +90,10 @@ def call(self, apiname, args, handler):
9690 with self ._handlers_lock :
9791 self ._handlers [self .rid ] = handler
9892
99- def sync_call (self , apiname , args = { }, timeout = 5 ):
93+ def sync_call (self , apiname , args = {}, timeout = 5 ):
10094 """ 给定参数args,同步调用RPCServer的apiname服务,
10195 返回该服务的处理结果。如果超时,返回None。
102-
96+
10397 Args:
10498 apiname (str): 服务API名称。
10599 args (dict): 给服务API的参数。
@@ -117,11 +111,10 @@ def sync_call(self, apiname, args={ }, timeout=5):
117111 self ._sync_call_time = datetime .now ()
118112 self ._timeout = timeout
119113 with self ._handlers_lock :
120- self ._handlers [self .rid ] = None #
114+ self ._handlers [self .rid ] = None
121115 self ._event_engine .emit (Event (self .EVENT_FROM_CLIENT , args ))
122116 self ._waiting_server_data ()
123117 ret = self ._sync_ret
124- #self._sync_ret = None
125118 return ret
126119
127120 def _waiting_server_data (self ):
@@ -136,7 +129,7 @@ def _notify_server_data(self):
136129class EventRPCServer (object ):
137130 def __init__ (self , event_engine , service , event_client = None , event_server = None ):
138131 super (EventRPCServer , self ).__init__ ()
139- self ._routes = { }
132+ self ._routes = {}
140133 self ._routes_lock = Lock ()
141134 # server监听的client事件
142135 self .EVENT_FROM_CLIENT = event_client if event_client else "EVENT_FROM_%s_CLIENT" % service .upper ()
@@ -149,16 +142,16 @@ def __init__(self, event_engine, service, event_client=None, event_server=None):
149142
150143 def register (self , route , handler ):
151144 """ 注册服务函数。
152-
145+
153146 Args:
154147 route (str): 服务名
155148 handler (function): 回调函数
156-
149+
157150 Returns:
158151 Bool. 是否注册成功。
159152 """
160153 if route in self ._routes :
161- return False
154+ return False
162155 with self ._routes_lock :
163156 self ._routes [route ] = handler
164157 return True
@@ -179,30 +172,28 @@ def _process_request(self, event):
179172 try :
180173 with self ._routes_lock :
181174 handler = self ._routes [apiname ]
182- ## @TODO async
175+ # @TODO async
183176 ret = handler (** args )
184177 except Exception as e :
185178 log .exception (e )
186179 else :
187- args = { 'ret' : ret ,
180+ args = {'ret' : ret ,
188181 'rid' : rid
189182 }
190183 log .debug ('RPCServer [%s] emit %s' % (self ._name ,
191- str (self .EVENT_FROM_SERVER )))
192- #str(Event(self.EVENT_FROM_SERVER, args))))
184+ str (self .EVENT_FROM_SERVER )))
193185 self ._event_engine .emit (Event (self .EVENT_FROM_SERVER , args ))
194186
195187
196-
197188if __name__ == '__main__' :
198189
199190 from eventengine import ZMQEventEngine
200191 import sys
201192
202193 def print_hello (data ):
203- """"""
194+ """"""
204195 six .print_ ("***************" )
205- six .print_ ("print_hello" )
196+ six .print_ ("print_hello" )
206197 six .print_ ("args: " , data )
207198 six .print_ ("return: " , 123 )
208199 return "123"
0 commit comments