Guest User

Untitled

a guest
May 25th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.95 KB | None | 0 0
  1. import asyncio
  2. import contextvars
  3. import uvloop
  4. from types import SimpleNamespace
  5.  
  6. asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
  7.  
  8. trace_context = contextvars.ContextVar('trace_context')
  9.  
  10.  
  11. class MyCollector(uvloop.TracingCollector):
  12. def __init__(self, loop=None):
  13. self._loop = loop if loop else asyncio.get_event_loop()
  14.  
  15. @property
  16. def loop(self):
  17. return self._loop
  18.  
  19. ## Collector methods
  20. def dns_request_begin(self, host, port, family, type, proto, flags):
  21. ctx = SimpleNamespace(dns_request_begin = self.loop.time())
  22. trace_context.set(ctx)
  23.  
  24. def dns_request_end(self, data):
  25. delta = loop.time() - trace_context.get().dns_request_begin
  26. print(f"DNS request took {delta}")
  27.  
  28.  
  29. async def main(loop):
  30. with uvloop.tracing(MyCollector(loop)):
  31. for i in range(100):
  32. host = await loop.getaddrinfo('localhost', 80)
  33.  
  34. loop = asyncio.get_event_loop()
  35. loop.run_until_complete(main(loop))
Add Comment
Please, Sign In to add comment