def ping_loop(ctx,
ping_interval,
cycle_time,
initial_ping_timeout,
ping_retries,
backoff,
loop,
inventory_router_url):
"""
:param ctx:
:param ping_interval:
:param cycle_time:
:param initial_ping_timeout:
:param ping_retries:
:param backoff:
:param loop:
:param inventory_router_url:
:return:
"""
# load the queue
inventory_client = InventoryClient(inventory_router_url)
while True:
if stop_ping_loop:
log.info('Stopping ping loop')
break
log.debug('Looking for work')
now = time.time()
for mercury_id, data in list(active_state.items()): # copy to list because the list length could change
# out from under us
if now - data['last_ping'] > ping_interval and not data['pinging']:
log.debug('Scheduling ping for {}'.format(mercury_id))
active_state[mercury_id]['pinging'] = True
asyncio.ensure_future(ping(data, ctx, initial_ping_timeout, ping_retries, backoff, inventory_client),
loop=loop)
await asyncio.sleep(cycle_time)
评论列表
文章目录