def _wait(self, action=None, timeout=None):
"""
???service_name??service??
:param timeout:
:type timeout: float
:return:
"""
remain = timeout
waiter = Waiter()
self._oc.add_waiter(self.service_name, waiter)
try:
while True:
with Timeout(remain, _TimeOut):
start = time.time()
cur_action = waiter.get()
remain = remain - (time.time() - start)
if action is None: # ???????????
break
elif action == cur_action: # ????????
break
elif remain < 0.001: # ????????1ms
raise _TimeOut
else:
continue
except _TimeOut: # ????
return False
except Exception as e:
raise err.OctpParamError('catch unexpect error: %s. more: %s', e, traceback.format_exc())
else:
return True
finally:
self._oc.del_waiter(self.service_name, waiter)
评论列表
文章目录