本文整理汇总了Python中cocaine.services.Service.subscribe方法的典型用法代码示例。如果您正苦于以下问题:Python Service.subscribe方法的具体用法?Python Service.subscribe怎么用?Python Service.subscribe使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类cocaine.services.Service
的用法示例。
在下文中一共展示了Service.subscribe方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: CocaineProxy
# 需要导入模块: from cocaine.services import Service [as 别名]
# 或者: from cocaine.services.Service import subscribe [as 别名]
#.........这里部分代码省略.........
self.get_request_id = generate_request_id
# post the watcher for routing groups
self.io_loop.add_future(self.on_routing_groups_update(),
lambda x: self.logger.error("the updater must not exit"))
# run infinity check locator health status
self.locator_health_check()
@gen.coroutine
def locator_health_check(self, period=5):
wait_timeot = datetime.timedelta(seconds=period)
while True:
try:
self.logger.debug("check health status of locator via cluster method")
channel = yield gen.with_timeout(wait_timeot, self.locator.cluster())
cluster = yield gen.with_timeout(wait_timeot, channel.rx.get())
self.locator_status = True
self.logger.debug("dumped cluster %s", cluster)
yield gen.sleep(period)
except Exception as err:
self.logger.error("health status check failed: %s", err)
self.locator_status = False
yield gen.sleep(1)
@gen.coroutine
def on_routing_groups_update(self):
uid = gen_uid()
self.logger.info("generate new unique id %s", uid)
maximum_timeout = 32 # sec
timeout = 1 # sec
while True:
self.current_rg = {}
try:
self.logger.info("subscribe to updates with id %s", uid)
channel = yield self.locator.routing(uid, True)
timeout = 1
while True:
new = yield channel.rx.get()
if isinstance(new, EmptyResponse):
# it means that the cocaine has been stopped
self.logger.error("locator sends close")
break
updates = scan_for_updates(self.current_rg, new)
# replace current
self.current_rg = new
if len(updates) == 0:
self.logger.info("locator sends an update message, "
"but no updates have been found")
continue
self.logger.info("%d routing groups have been refreshed %s",
len(updates), updates)
for group in updates:
# if we have not created an instance of
# the group it is absent in cache
if group not in self.cache:
self.logger.debug("nothing to update in group %s", group)
continue
for app in self.cache[group]:
self.logger.debug("%s: move %s to the inactive queue to refresh"
" routing group", app.id, app.name)
self.migrate_from_cache_to_inactive(app, group)
except Exception as err:
timeout = min(timeout << 1, maximum_timeout)
self.logger.error("error occurred while watching for group updates %s. Sleep %d",